#elasticsearch #autocomplete
#elasticsearch #автозаполнение
Вопрос:
Я пытаюсь реализовать автозаполнение в своем приложении. допустим, у меня есть следующие документы:
"red smart phone"
"super smart phone"
"small bluetooth speaker"
Поэтому, когда пользователь вводит «s», мне нужно вернуть в качестве предложений:
"smart"
"small"
В настоящее время я использую простое выделение в Elasticsearch, чтобы получить совпадающие слова (умные, маленькие). Однако дело в том, что я получаю обратно в 2 раза больше «умных». Можно ли настроить ES возвращать только отдельные значения для выделения?
Кроме того, возможно ли, чтобы ES возвращал также следующее (n) слово (слова), например:
"smart phone"
"small bluetooth (speaker)"
Ответ №1:
Подсказчик завершения, похоже, является решением для ваших нужд: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
Вам необходимо изменить сопоставление ES, чтобы добавить новые свойства в ваше поле. Будьте осторожны и с вашим анализатором.
HtH,
НиколасИ.
Комментарии:
1. Привет, Николас, проблема с подсказкой завершения заключается в том, что мне нужно явно указать вводимый и выводимый текст в разделе предложения во время индексации. Но с почти 1 Млн документов это совершенно невозможно.
2. Хорошо, я понял вашу точку зрения, вы можете использовать вместо этого анализатор EdgeNGram, но будьте осторожны с конфигурацией, потому что это может привести к значительному потреблению памяти и (кроме того, дискового пространства). С помощью этого анализатора вы должны знать, как будет использоваться автозаполнение, потому что вам нужно решить, как разделить ваш термин во время индексации. elastic.co/guide/en/elasticsearch/reference/current /…
3. Конечно, я уже использую это вместе с функцией выделения. Как я уже сказал, моя проблема заключается в том, как вернуть только отдельные значения совпадающих слов.
4. Вы пытаетесь использовать функцию выделения для возврата определенного результата, но выделение явно не реализовано для этого. Чтобы уменьшить количество результатов, пытались ли вы вместо этого использовать термин «агрегация»? elastic.co/guide/en/elasticsearch/reference/current /…
5. Другими словами, Николас, моя проблема в том, что, учитывая 3 документа в моем вопросе, какой стратегии вы бы последовали, чтобы получить следующий ответ: «умный», «маленький, когда пользователь вводит «s»?