Я пытаюсь реализовать службу 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 , но в документации не рекомендуется использовать *
в начале шаблона, поскольку это может привести к снижению производительности. Может с правильным индексом?
Есть еще идеи?