Как предложить (автозаполнение) следующее слово в поиске эластичности?

Предположим, что я проиндексировал следующие строки:

"My awesome pizza"
"My awesome beer"
"Heineken is awesome beer"
"I love pizza pepperoni"
"Where is my beer"

Для ввода "My" я хочу предложить:

  • My awesome
  • 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 может быть найдена здесь.

Два оговорки:

  1. Они реализованы в структуре данных в памяти и поэтому не подходят для больших наборов данных, которые не могут вписываться в память.

  2. Ранжирование результатов не основано на сходстве (результат совпадает или нет), поэтому вам нужно быть осторожным с смешиванием нечетких и нечетких совпадений.

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
            }
        }
    }
}'