Как предложить (автозаполнение) следующее слово в поиске эластичности?
Предположим, что я проиндексировал следующие строки:
"My awesome pizza"
"My awesome beer"
"Heineken is awesome beer"
"I love pizza pepperoni"
"Where is my beer"
Для ввода "My"
я хочу предложить:
Для ввода "awesome"
Я хочу предложить:
- удивительная пицца
- удивительное пиво
и др.
Итак, я хочу предоставить следующие слова после ввода пользователем... Также с некоторой нечеткостью (aEwsome) также должна быть поддержана.
Какие советники/анализаторы я должен использовать? Я пробовал Term и завершение, но это не то, что я хочу (выполнение, например, выполняется только при поиске начала фразы - если я передаю слово, находящееся в середине индексированная строка, то она не предложит его,)
Ответы
Ответ 1
Elasticsearch обеспечивает удобный способ быстрого и быстрого запуска автозаполнения с помощью функции завершения тестирования.
Проверьте эту ссылку, это то, что вы ищете
https://qbox.io/blog/multi-field-partial-word-autocomplete-in-elasticsearch-using-ngrams
Completion Suggestester также помогает вам достичь этой функциональности
Ответ 2
На всякий случай, когда кто-то сталкивается здесь, подход edge-n-gram (как отметил @Siddardha Budige) теперь заменяется подсказками завершения.
Они специально построены с учетом авто-внушений, поэтому они быстро эффективны. Очень информативный пост. Команда ES может быть найдена здесь.
Два оговорки:
-
Они реализованы в структуре данных в памяти и поэтому не подходят для больших наборов данных, которые не могут вписываться в память.
-
Ранжирование результатов не основано на сходстве (результат совпадает или нет), поэтому вам нужно быть осторожным с смешиванием нечетких и нечетких совпадений.
EDIT: Мы поделились своим собственным опытом с использованием здесь приложений для завершения работы.
Он включает некоторые практические примеры по нечеткости и информации для неанглийских входов.
Ответ 3
Вот способ использования автоматического завершения
вам нужно использовать метод Fuzzy из этого блога
добавьте нечеткого рекомендателя к вашему предложению:
To add fuzzy suggester
curl -X POST 'localhost:9200/music/_suggest?pretty' -d '{
"song-suggest" : {
"text" : "n",
"completion" : {
"field" : "suggest",
"fuzzy" : {
"fuzziness" : 2
}
}
}
}'