Частичный поиск с использованием query_string в Elastic Search - PullRequest
0 голосов
/ 30 октября 2018

В моем индексе 1 миллион документов. Я хочу добавить функцию частичного поиска для своих документов, поэтому я использую следующий запрос: (для поиска "mall")

GET test/_search
{
  "query": {
    "query_string": {
      "query": "*mall*",
      "default_operator": "OR",
      "fields": ["title^6", "fulltext"]
    }
  }
}

Приведенный выше запрос подходит для частичного поиска?

Влияет ли это на эффективность поиска при увеличении количества документов?

1 Ответ

0 голосов
/ 30 октября 2018

Существует множество дискуссий по частичному поиску в различных поисковых системах, вполне возможно найти в Интернете множество вариантов и решений.

Ваш запрос кажется слишком подходящим для этого. С "* word *" производительность будет наихудшей, потому что движок должен просматривать все тексты всех записей. Это нормально для небольших наборов данных (когда нет необходимости использовать ES), но быстро ухудшается. Лучше использовать полнотекстовый поиск (для отдельных слов, разделенных пробелами или что угодно, это режим по умолчанию для ES - просто используйте проанализированные поля и не используйте "*") или предварительная обработка (извлеките «торговый центр» и другие поисковые термины при заполнении ES). Также запрос «prefix» работает нормально, если он соответствует требованиям. Если шаблонный запрос работает медленно, то N-грамм используются для частичного поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...