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

Elasticsearch如何在分词后合并所有Token且不排序?

解决方案

要实现分词过滤后合并所有Token且不排序的需求,有两种可行方案,可根据你的场景选择:

方案一:字符过滤器+关键词分词器(性能优先)

直接在文本分词前移除停用词,再将整个文本作为单个Token输出,适合停用词规则简单、不需要复杂分词处理的场景:

"analysis": {
  "char_filter": {
    "clean_stopwords": {
      "type": "pattern_replace",
      "pattern": "\\b(elastic|aws|java|the|in|are)\\b",
      "replacement": "",
      "flags": "CASE_INSENSITIVE"
    },
    "trim_extra_spaces": {
      "type": "pattern_replace",
      "pattern": "\\s+",
      "replacement": " "
    }
  },
  "analyzer": {
    "my-analyser": {
      "tokenizer": "keyword",
      "char_filter": ["clean_stopwords", "trim_extra_spaces"],
      "filter": ["lowercase"] // 按需添加,比如统一转小写
    }
  }
}
  • 逻辑:先用字符过滤器移除所有目标停用词,合并多余空格,最后通过keyword分词器将处理后的文本直接作为单个Token输出。

方案二:脚本过滤器(灵活适配现有流程)

如果需要保留原有的分词、停用词过滤流程,再合并Token,用自定义脚本过滤器实现:

"analysis": {
  "analyzer": {
    "my-analyser": {
      "tokenizer": "standard",
      "filter": ["custom_stop", "merge_all_tokens"]
    }
  },
  "filter": {
    "custom_stop": {
      "type": "stop",
      "ignore_case": true,
      "stopwords": ["elastic", "aws", "java", "the", "in", "are"]
    },
    "merge_all_tokens": {
      "type": "script",
      "script": {
        "source": """
          List mergedTokens = new ArrayList();
          StringBuilder combined = new StringBuilder();
          for (Token token : tokens) {
            if (combined.length() > 0) {
              combined.append(' ');
            }
            combined.append(token.getTerm());
          }
          mergedTokens.add(new Token(combined.toString(), 0, combined.length()));
          return mergedTokens;
        """
      }
    }
  }
}
  • 逻辑:先通过standard分词器拆分文本,custom_stop过滤停用词,最后用脚本过滤器遍历剩余Token,将它们用空格拼接成单个Token返回,完全保留原Token的顺序。

测试输入"The concepts in elastic aws java are discussed here"时,两种方案都会输出单个Token:"concepts discussed here"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:23:10