You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solr Ngram过滤器后通过Pattern replacement filter为token追加*方案咨询

实现方案

你可以直接使用Solr内置的PatternReplaceFilterFactory完成需求,无需开发自定义插件,仅需要调整现有查询分析器的过滤器顺序即可。

修改后的完整配置

<analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1"/>
        <filter class="solr.LengthFilterFactory" min="2" max="100" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
        <filter class="solr.NGramFilterFactory" minGramSize="4" maxGramSize="30" />
        <!-- 新增以下过滤器,给所有NGram生成的token末尾加* -->
        <filter class="solr.PatternReplaceFilterFactory" pattern="(.*)" replacement="$1*" replace="all" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>

配置说明

  • 新增的过滤器放在NGramFilterFactory之后、RemoveDuplicatesTokenFilterFactory之前,确保只处理NGram生成的所有token,不会影响前面环节的处理结果
  • 正则规则(.*)会完整匹配每个token的内容,$1*表示保留原token内容不变,同时在末尾追加*符号
  • replace="all"参数保证所有符合匹配规则的token都被处理,没有遗漏

注意事项

  • 修改配置后需要重启Solr节点,或者重载对应Collection的配置才能生效
  • 如果后续还有其他针对token的处理逻辑,需要确认带的token不会被后续过滤器误处理,比如被特殊字符清理规则删除符号

内容的提问来源于stack exchange,提问作者Karthick S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:36:02