изменение поискового анализатора crate db edge_ngram

Я создал собственный анализатор.

 create ANALYZER analyzer_test (TOKENIZER standard,TOKEN_FILTERS (
 asciifolding, 
 lowercase, 
 myedge WITH (type='edge_ngram',min_gram=3,max_gram=20) ));

Я ищу в своей базе данных, например, "bro". Результаты такие.

братан

бровь

коричневый

Это нормально, но я ищу "brow". Результаты такие же.

братан

бровь

коричневый

Но я хочу найти только начало с "brow". Как можно это сделать.

бровь

коричневый

Изменить : Мой пользовательский анализатор имеет asciifolding . Так что обычно, когда я искал «çan», результаты выводятся в виде «çan», «can», «çanak», . Но если я использую стандартный анализатор для анализа условия запроса, у меня возникает другая проблема. Когда я искал "çan", ничего не вышло. В общем, я хочу что-то вроде этого. Я должен использовать asciifolding. Я хочу получить список результатов, которые начинаются с «условия запроса». Вариантов фразы и фразы_префикса мне недостаточно, потому что в некоторых поисковых запросах есть несколько слов, но не фраза. Спасибо.


person sfk    schedule 25.06.2018    source источник


Ответы (1)


По умолчанию CrateDB использует тот же анализатор, который определен для определения столбца, для анализа условий поиска. В случае edge_ngram tokenizer/token_filter это в основном не то, что вам нужно (в вашем случае он анализирует поисковый запрос на bro и brow и ищет оба токена). Пользовательский анализатор поиска можно определить, добавив параметры к предикату match, см. https://crate.io/docs/crate/reference/en/latest/general/dql/fulltext.html#predicates-match..

Пример использования анализатора standard для анализа термина запроса:

select * from my_table where match(my_string, 'brow') using best_fields with(analyzer='standard');

Это должно привести к ожидаемым совпадениям.

person Sebastian Utz    schedule 25.06.2018
comment
Спасибо за ответ. В моем пользовательском анализаторе есть asciifolding . Так что обычно, когда я искал çan, результаты отображаются следующим образом: çan, can, çanak, . Но если я использую стандартный анализатор для анализа условия запроса, у меня возникает другая проблема. Когда я искал çan никаких результатов. В общем, я хочу что-то вроде этого. Я должен использовать asciifolding. Я хочу получить список результатов, которые начинаются с термина запроса. Вариантов фразы и фразы_префикса мне недостаточно, потому что в некоторых поисковых запросах есть несколько слов, но не фраза. - person sfk; 25.06.2018
comment
Так что просто создайте другой пользовательский анализатор, НЕ использующий фильтр токенов edge_ngram, и используйте его для поиска. - person Sebastian Utz; 26.06.2018