Squeak.ru - шаблоны программирования

Неполучение ожидаемого вывода при запросе списка в ElasticSearch

======== Приведенная ниже попытка выполнить запрос к списку не сработала==============
Входная запись:

{
  "somerecord": [
    {
      "fieldValue": "1",
      "sampleKey": [
        "1",
        "2"
      ]
    },
    {
      "fieldValue": "2",
      "sampleKey": [
        "3",
        "4"
      ]
    }
  ]
}

Ожидаемый или необходимый вывод для поиска «fieldValue»: «1»:

{
  "fieldValue": "1",
  "sampleKey": [
    "1",
    "2"
  ]
}

Шаги:
Создал сопоставление
Поместил запись
Запрос с использованием разных типов запросов

Рекомендации:

http://www.spacevatican.org/2012/6/3/fun-with-elasticsearch-s-children-and-nested-documents/ https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-mapping.html https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html https://gist.github.com/nicolashery/6317643 http://elasticsearch-cheatsheet.jolicode.com/ http://obtao.com/blog/2014/04/elasticsearch-advanced-search-and-nested-objects/ http://joelabrahamsson.com/elasticsearch-nested-mapping-and-filter/

Пожалуйста, дайте мне знать, как достичь того, что я намереваюсь.

======== Некоторые команды выполняются =========
1.

curl -XPOST https://someClusterURL/tax2 -d '{
  "mappings": {
    "ids": {
      "properties": {
        "somerecord": {
          "type": "nested",
          "properties": {
            "fieldValue": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}'
  1. curl -XPUT https://someClusterURL/tax2/ids/1 -d '{
      "somerecord": [
        {
          "fieldValue": "1",
          "sampleKey": [
            "1",
            "2"
          ]
        },
        {
          "fieldValue": "2",
          "sampleKey": [
            "3",
            "4"
          ]
        }
      ]
    }'
    
  2. 3.
curl -XGET  https://someClusterURL/tax2/ids/_search -d '{
  "query": {
    "nested": {
      "path": "somerecord",
      "query": {
        "bool": {
          "must": [
            { "match": { "fieldValue": "1" }}
          ]
        }
      }
    }
  }
}'

Результат:

{
  "somerecord": [
    {
      "fieldValue": "1",
      "sampleKey": [
        "1",
        "2"
      ]
    },
    {
      "fieldValue": "2",
      "sampleKey": [
        "3",
        "4"
      ]
    }
  ]
}

Пробовал больше, но все равно не получилось.


Ответы:


1

Используйте Inner_Hits и Фильтрация источника (чтобы отключить источник) нравится:

{
"_source": false,
"query": {
"nested": {
  "path": "somerecord",
  "query": {
    "bool": {
      "must": [
        { "match": { "fieldValue": "1" }}
       ]
    }
   },
   "inner_hits" :{}
   }
 }

Использование "_source": false не приведет к получению сведений об источнике.

08.04.2016
  • Спасибо, Рича. Я попробовал с ним, получил подэлемент, который я ищу в inner_hits. Но на этом моя проблема не закончилась, я не хочу полной записи. Я проверил параметры inner_hits и другие, не смог найти настройку для отключения полной записи в ответ. Дайте мне знать, если это возможно. 08.04.2016

  • 2

    Проблема в том, что вы храните оба объекта в одном вложенном документе. При попадании в один вложенный объект возвращается полный документ.

    Вам вообще нужны вложенные документы?

    07.04.2016
  • Входная запись содержит список и будет храниться в ElasticSearch. После сопоставления внутренний объект должен быть задан. 07.04.2016
  • Затем взгляните на внутренние обращения. агрегация. Это даст вам внутренний объект, вызвавший удар. 07.04.2016
  • Спасибо, Майкл. Я попробовал с ним, получил подэлемент, который я ищу в inner_hits. Но, как указано ниже в ответе Ричи, моя проблема на этом не закончилась, мне не нужна полная запись. Я проверил параметры inner_hits и другие, не смог найти настройку для отключения полной записи в ответ. Дайте мне знать, если это возможно. 08.04.2016
  • Ниже примеры json объясняется, как это сделать. Более того, у Ричи есть решение в ответе. ;) 08.04.2016
  • Ага! С фильтрацией источника это сработало. Благодаря Рича и вы. 09.04.2016
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...