Пользовательский 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 увеличит размер вашего индекса (поскольку теперь для одной и той же строки генерируется больше токенов). так что учтите это тоже.

Другие вопросы по тегам