Я хочу реализовать функцию автозаполнения в своем приложении с помощью elasticsearch.
Допустим, мой ввод "ronan f"
, я хочу, чтобы эластичный возвращал все элементы, где "ronan"
или "f"
содержится в фамилии или имени. Я ожидаю, что elasticsearch отсортирует результат по рангу, поэтому элемент, наиболее близкий к тому, что я ищу, должен быть сверху.
Я пробовал несколько запросов, но ни один из них не дал ожидаемого результата.
Например :
{
"query": {
"bool": {
"must_not": [
{
"match": {
"email": "*@guest.booking.com"
}
}
],
"should": [
{
"match": {
"lastname": "ronan"
}
},
{
"match": {
"firstname": "ronan"
}
},
{
"match": {
"lastname": "f"
}
},
{
"match": {
"firstname": "f"
}
}
],
"minimum_should_match" : 1
}
},
"sort": [
"_score"
],
"from": 0,
"size": 30
}
С этим запросом ранги немного расходятся, например:
"_index": "clients",
"_type": "client",
"_id": "4369",
"_score": 20.680058,
"_source": {
"firstname": "F",
"lastname": "F"
}
находится сверху:
"_index": "clients",
"_type": "client",
"_id": "212360",
_score": 9.230003,
"_source": {
"firstname": "Ronan",
"lastname": "Fily"
}
Для меня второй результат должен иметь лучший ранг, чем первый.
Может ли кто-нибудь показать мне, как я могу добиться желаемого результата?
Для информации, я не могу использовать функцию Completion Suggester в elasticsearch, потому что я не могу получить доступ к конфигурации базы данных (поэтому нет индексов).