В настоящее время я изучаю Elasticsearch и у меня много вопросов.
Самый неотложный вопрос, который возникает, состоит в том, как отсортировать по наилучшему совпадению поля (нефильтрованный).
Iиметь следующий набор данных:
{
"id": 1,
"name": "John Smith",
"categories": ["1", "2"]
},
{
"id": 2,
"name": "John Smith",
"categories": ["2", "3"]
},
{
"id": 3,
"name": "John Doe",
"categories": ["2", "4"]
}
Я хочу выполнить поиск по name
, и в случае, если результат будет таким же, я хотел бы заказать по наилучшему совпадению на categories
.
Мой текущий запрос фильтрует только по name
:
{
"query": {
"bool": {
"must": {
"bool": {
"should": [
{
"query_string": {
"query": "*John Smith*",
"fields": ["name"],
"default_operator": "and",
"boost": 10
}
},
{
"match": {
"name": {
"query": "John Smith",
"fuzziness": "AUTO",
"operator": "and"
}
}
}
]
}
}
}
}
}
В этом случае результатом будет два обращения ("id": 1
& "id": 2
), но я бы хотел упорядочить по categories
.Например, если я также запросил "categories": ["3", "4"]
, первым результатом будет запись с "id": 2
, поскольку эта запись имеет категорию (3
), которая соответствует.
Как я могу изменить свой запрос надостичь этого требования?