Пользовательский ShingleFilter в соль
Мое требование - иметь фильтр токенов, который может производить токены, как показано ниже:
Текст - "Быстрый прыжок бурой лисы"
токены:
"Быстрый"
"Быстрый коричневый"
"Быстрая коричневая лиса"
"Быстрый рывок лисы"
Если я использую SingleFilter
тогда я получаю дополнительные токены, как - "brown fox"
"fox jump"
который я не хочу. Есть ли готовый способ добиться этого. Любая помощь будет высоко оценен
1 ответ
В основном вы хотите поиск префикса, попробуйте EdgeNGramFilterFactor
этот FilterFactory очень полезен при сопоставлении подстрок префикса.
<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldType>
Примечание: minGram и maxGram будут определять длину токена, поэтому в случае, если минимальная длина токена будет равна 2., а максимальная длина токена будет равна 15. Любой токен длиной менее 2 и больше 15 будет сброшен.
так что если у вас есть строка, скажите "а", она не будет размечена. поскольку длина токена будет меньше 2. То же самое относится и к максимальной длине. так что настройте в соответствии с вашими потребностями.
Также обратите внимание, что использование EdgeNgram увеличит размер вашего индекса (поскольку теперь для одной и той же строки генерируется больше токенов). так что учтите это тоже.