我的要求是有一个令牌过滤器,它可以产生如下令牌 -
文本- “Quick brown fox jump”
标记:
“Quick”
“Quick brown”
“Quick brown fox”
“Quick brown fox jump”
如果我使用SingleFilter
,那么我会得到额外的令牌,例如 -
"brown fox"
"fox jump"
我不想要的。有没有现成的方法来实现它。任何帮助将不胜感激
基本上你想要一个前缀搜索,试试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 的令牌都将被丢弃。
所以如果你有一个字符串说“a”,它不会被标记化。因为令牌的长度将小于 2。maxlength 也是如此。所以根据你的需要进行调整。
另请注意,使用 EdgeNgram 会增加您的索引大小(因为现在为同一字符串生成了更多标记)。所以也要考虑到这一点。