Я использую 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)));
Спасибо!