crate db edge_ngram изменение поискового анализатора - PullRequest
0 голосов
/ 25 июня 2018

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

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

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

бро

1010 * чело *

коричневый

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

бро

чело

* * Тысяча двадцать-одина коричневый * * тысяча двадцать-дв

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

чело

коричневый

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

1 Ответ

0 голосов
/ 25 июня 2018

По умолчанию 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');

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

...