Я хочу реализовать функцию автозаполнения в моем приложении сластиком поиска.
Допустим, мой ввод "ronan f"
, я хочу, чтобы elasti c вернул все элементы, где "ronan"
или "f"
содержится в фамилии или имени. Я ожидаю, чтоasticsearch отсортирует результат по рангу, поэтому элемент, ближайший к тому, что я ищу, должен быть сверху.
Я пробовал несколько запросов, но ни один из них не дал ожидаемого результата.
Например:
{
"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 из эластичного поиска, потому что не могу получить доступ к конфигурации базы данных ( так что никаких индексов).