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

Solr 8.0+词级nGram实现:自定义词串分词方案咨询

Solr 8.0+ 满足指定词级分词需求的过滤器方案

一、生成左向词级前缀组合(如ABC、ABC regional、ABC regional private…)

要生成从第一个词开始的连续前缀词组合,可通过ShingleFilterFactory配合过滤规则解决默认Shingle生成多余中间分片的问题:

  1. 基础配置思路
    先通过标准分词器拆分单个词,再用Shingle生成所有连续词组合,最后过滤掉非前缀开头的分片:

    <fieldType name="text_prefix_shingle" class="solr.TextField">
      <analyzer>
        <!-- 拆分原文本为单个词 -->
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <!-- 生成1到5词的所有连续分片(5对应原文本最大词数) -->
        <filter class="solr.ShingleFilterFactory" minShingleSize="1" maxShingleSize="5" outputUnigrams="true"/>
        <!-- 过滤掉不以首词开头的分片(示例首词为ABC,通用场景可替换为脚本过滤) -->
        <filter class="solr.PatternReplaceFilterFactory" pattern="^(?!ABC).*$" replacement="" replace="all"/>
      </analyzer>
    </fieldType>
    

    若需适配任意首词的通用场景,将第三步替换为ScriptFilterFactory,通过token起始位置过滤:

    <filter class="solr.ScriptFilterFactory" script="keepPrefixShingles.js"/>
    

    keepPrefixShingles.js脚本内容:

    function filter(token) {
      // 仅保留从第一个词开始的前缀分片
      return token.startOffset === 0;
    }
    
  2. 简洁替代逻辑
    无需额外过滤的话,也可通过多次叠加Shingle配合LimitTokenPositionFilterFactory限制仅处理前N个词,但上述Shingle+过滤的方案更直接。

二、生成带占位符的跳词分片(如regional _ coastal)

要生成跳过中间词的带占位符分片,可通过ShingleFilterFactory结合token移除+占位符配置实现:

  1. 配置示例
    先移除需要跳过的中间词,再用Shingle生成分片并填充占位符:

    <fieldType name="text_shingle_with_placeholder" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <!-- 移除需跳过的词(示例为private) -->
        <filter class="solr.RemoveTokenFilterFactory" words="skip_words.txt"/>
        <!-- 生成3词分片,用_填充缺失token -->
        <filter class="solr.ShingleFilterFactory" minShingleSize="3" maxShingleSize="3" fillers="_" outputUnigrams="false"/>
      </analyzer>
    </fieldType>
    

    skip_words.txt中写入需跳过的词:

    private
    
  2. 通用跳词场景
    若需灵活指定跳过位置,可改用ScriptFilterFactory手动生成跳词分片,或结合WordDelimiterFilterFactory调整token后再生成Shingle。

关键参数说明

  • ShingleFilterFactory核心参数:
    • minShingleSize/maxShingleSize:控制生成分片的词数范围
    • fillers:设置缺失token时的占位符
    • outputUnigrams:是否保留单个词的分片

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:15:49