Допустим, у меня есть индекс с двумя текстовыми полями:
"properties" : {
"name" : {
"type" : "text"
},
"description" : {
"type" : "text"
}
}
Мне нужно реализовать полнотекстовый поиск по этим двум полям с приоритетом.Сначала по имени, а затем по описанию.Дело в том, что мне не нужно искать в описании, если я уже нашел что-то по имени.Я могу реализовать два запроса и проверить, возвращает ли поиск по имени 0 результат, чем поиск по описанию.Но есть ли способ реализовать это с помощью одного запроса?
UPD.Мой запрос довольно прост:
"query": {
"bool": {
"should": [
{
"match": {
"name": {
"query": "some user input here",
"operator": "and"
}
}
},
{
"match": {
"description": {
"query": "some user input here",
"operator": "and"
}
}
}
]
}
}
Уточненный вопрос: как сгруппировать результат одного запроса в две группы: те, которые совпадают по имени, и те, которые соответствуют по описанию?Первая группа должна быть набрана выше, чем вторая.Мне нужно знать общее количество для обеих групп, чтобы реализовать поведение подкачки в моем приложении.Поэтому, когда первая группа пуста, я покажу вторую, но не только потом.В противном случае я спрячу вторую группу от пользователя.Также должна быть оценка релевантности (предоставленной анализатором) внутри группы, чтобы предоставить пользователям приемлемые результаты поиска.