динамический поиск во вложенном поле multi / all эластичного поиска - PullRequest
0 голосов
/ 13 сентября 2018

Я использую spring-data -asticsearch 2.0.8 иasticsearch.2.2.0 для динамического поиска во вложенных объектах.

В основном мой вложенный объект может иметь несколько вложенных полей,но я хотел бы искать во всех этих полях - динамически.например, документ животного может иметь 3x поля, которые его описывают: имя / размер / описание.

Я бы хотел выполнить поиск по всем этим, поскольку у моей конечной точки поиска просто есть опция свободного текста «Описание»,поэтому, когда пользователь вводит «15» или «собака» в своей точке входа, поиск проверяет поля «имя», «размер» и «описание» и возвращает что-то из него.

Мое отображение выглядит так:

{
    "mappings": {
        "animal_doc": {
            "properties": {
                "animal_description": {
                    "type": "nested",
                    "include_in_parent": true,
                    "properties": {
                        "name": {
                            "type": "string"
                        },
                        "size": {
                            "type": "string"
                        },
                        "description": {
                            "type": "string"
                        }
                    }
                },
           }
      }
  }

Я прочитал оба: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html и https://www.elastic.co/blog/managing-relations-inside-elasticsearch

, поскольку это можно решить путем создания запроса с (spring-data-es):

boolQuery.must(QueryBuilders.nestedQuery("animal_description", 
addMatchQuery("animal_description."+field, value)));

Таким образом, каждый раз я буду запрашивать Object.nestedField: значение Но я не хочу каждый раз указывать поле и хочу, чтобы оно было динамически - внутри вложенного поля animal_description - всетакже будут выполняться поиск по внутренним полям.

Желаемое решение будет выглядеть так:

boolQuery.must(QueryBuilders.nestedQueryGetAllFields("animal_description",value)));

Спасибо!

1 Ответ

0 голосов
/ 16 сентября 2018

Из вашего описания кажется, что вы можете использовать общие query string.Когда вы запрашиваете несколько конкретных полей.Например, допустим, вы хотите найти общее

описание животного

Ваш запрос будет выглядеть так:

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["properties.size", "properties.name", "properties.description"],
            "query" : "animal description"
        }
    }
}

Доступные параметрыиспользование этого запроса очень обширно, и я рекомендую вам проверить их здесь

...