Могу ли я разделить слово по терминам в Elasticsearch, чтобы улучшить производительность в `wildcard`? - PullRequest
0 голосов
/ 28 января 2020

Я использую Elasticsearch6.8 и использую match_phrase_prefix и wildcard в запросе. Я нашел производительность это довольно плохо. Я думаю, что нужно вручную разбить текст на массив терминов.

Например, поле имеет текст типа ABCD, вместо того, чтобы выполнять запрос префикса или подстановочный знак, я разбил текст на массив ["A", "AB", "ABC", "ABCD"] во время построения индекса. Затем используйте match запрос на поле. Поэтому, когда пользователи отправляют запрос, такой как AB, он будет точно соответствовать. Это хорошее решение для этого? Как это влияет на скоринг?

1 Ответ

0 голосов
/ 28 января 2020

Подход, который вы предлагаете, заключается в том, что токенайзер edge_ngram делает вasticsearch. Это увеличит ваше индексное пространство, производя намного больше токенов. Так что это действительно зависит от вашего варианта использования, поэтому, если у вас меньше размер данных, это ускорит ответ на запрос, но более распространенным вариантом использования для этого является автоматическое предложение (запросы поиска по типу). Вы можете прочитать больше об этом здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html

Дойдя до точки подсчета очков: хотя это зависит от того, какой запрос вы запускаете, но в целом он не будет иметь большой разницы по сравнению с match_phrase_prefix, как если бы вы сравнивали одинаковые токены.

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