SOLR通配符搜索未返回结果

wj8zmpe1  于 2022-11-29  发布在  Solr
关注(0)|答案(1)|浏览(185)

我有一个模式定义如下:

<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,它会在搜索结果中显示以上内容?我曾尝试在搜索查询的末尾附加 *,但无法使用。有什么建议吗?

enyaitl3

enyaitl31#

为了获得部分单词匹配,您必须更改或添加ngram过滤器。
尝试使用ngram筛选器。
工厂类:solr.NGramFilterFactory
例如它的参数:
最小克大小:(整数,默认值为1)最小n-gram大小必须大于0。
最大内存大小:(整数,默认值为2)最大n-gram大小必须〉= minGramSize。
例如,您可以为字段指定字段类型:

<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.NGramFilterFactory" minGramSize="1" maxGramSize="10"/>
      <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>

注意:如果您有巨大的数据集,ngram会导致大量的标记,从而导致索引大小变大。

相关问题