Подобные текстовые запросы в Elasticsearch - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь реализовать службу STA C с Расширением API запроса , используя Elasticsearch. Я ожидаю, что в индексе будет 15-20 миллионов документов с различными свойствами текста - большинство из которых имеют значения, которые являются перечислениями или имеют определенный формат c, а другие - неограниченные.

STA C spe c поддерживает следующие фильтры для запроса свойств текста без учета регистра: eq, neq, startsWith, endsWith, contains и in.

Мой вариант использования очень похож на тот, который приведен в этом вопросе SO: Как разумно объединить дранку и edgeNgram для обеспечения гибкого полнотекстового поиска? , из которого я скопировал таблицу ожидаемого поведения для ввода " 1 ":

  • eq соответствует" Таблица 1"," таблица 1", а не" 1 таблица "
  • startsWith соответствует " Таблица 1 ", " Таблица 1 .5", а не "таблицы 12"
  • endsWith соответствует " таблица 1"," Room 1, Sub таблица 1", не" стабильный 21 "
  • contains соответствует" TABLE 1"," Uns таблица 1 12 ", а не" 1 стол "

I попытался использовать принятый ответ (термин вариант), и он работает очень хорошо. У этого есть некоторые недостатки, все же. Для одного вы должны установить max_gram на максимально возможную длину текста. Если документ с более длинным текстом проиндексирован, вы не можете сопоставить его с запросом eq. Это, конечно, означает, что вы не можете разрешить свойства с произвольно длинным текстом.

В последнем обновлении связанного вопроса упоминается, что теперь вы можете использовать новый тип данных search-as-you-type. Читая документацию , он действительно говорит, что поддерживается префиксное и инфиксное завершение, но показывает только использование match_phrase_prefix в примерах, а match_phrase только для полных слов.

Другой альтернативой может быть использование запросов Wildcard , но в документации не рекомендуется использовать * в начале шаблона, поскольку это может привести к снижению производительности. Может с правильным индексом?

Есть еще идеи?

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