我有一个模式定义如下:
<fieldType name="textSuggest" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<filter class="solr.PatternReplaceFilterFactory" pattern="([,]+)" replacement=" " replace="all"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<filter class="solr.PatternReplaceFilterFactory" pattern="([,]+)" replacement=" " replace="all"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
还有一些数据的格式为:
17,WALKINGTON,AVENUE,,MARGARET RIVER,WA
如果我搜索17 walkington,它会在结果中显示以上内容。我如何确保如果我搜索17 walkington,它会在搜索结果中显示以上内容?我曾尝试在搜索查询的末尾附加 *,但无法使用。有什么建议吗?
1条答案
按热度按时间enyaitl31#
为了获得部分单词匹配,您必须更改或添加ngram过滤器。
尝试使用ngram筛选器。
工厂类:
solr.NGramFilterFactory
例如它的参数:
最小克大小:(整数,默认值为1)最小n-gram大小必须大于0。
最大内存大小:(整数,默认值为2)最大n-gram大小必须〉= minGramSize。
例如,您可以为字段指定字段类型:
注意:如果您有巨大的数据集,ngram会导致大量的标记,从而导致索引大小变大。