0

我的要求是有一个令牌过滤器,它可以产生如下令牌 -

文本- “Quick brown fox jump”
标记:
“Quick”
“Quick brown”
“Quick brown fox”
“Quick brown fox jump”

如果我使用SingleFilter,那么我会得到额外的令牌,例如 - "brown fox" "fox jump" 我不想要的。有没有现成的方法来实现它。任何帮助将不胜感激

4

1 回答 1

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 的令牌都将被丢弃。

所以如果你有一个字符串说“a”,它不会被标记化。因为令牌的长度将小于 2。maxlength 也是如此。所以根据你的需要进行调整。

另请注意,使用 EdgeNgram 会增加您的索引大小(因为现在为同一字符串生成了更多标记)。所以也要考虑到这一点。

于 2016-12-01T15:47:10.087 回答