我的要求是有一个令牌过滤器,可以生成令牌,如下所示 -
文字 - “快速棕色狐狸跳”
的令牌:
“快速”
“快速褐色”
“快棕狐”
“快速的棕色狐狸跳”
如果我使用SingleFilter
,那么我会获得额外的令牌,例如 -
"brown fox"
"fox jump"
这是我不想要的。有没有现成的方法来实现它。任何帮助都将受到高度赞赏
答案 0 :(得分:0)
基本上你想要一个前缀搜索,
试试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的令牌将被丢弃。
所以如果你有一个字符串说&#34; a&#34;它不会被标记化。因为令牌的长度将小于2.同样适用于maxlength。所以根据你的需要进行调整。
另请注意,使用EdgeNgram会增加索引大小(现在为同一个字符串生成更多令牌)。所以也考虑到这一点。