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

如何让Elasticsearch的word_delimiter_graph仅按指定分隔符拆分?

实现仅按指定分隔符拆分的类word_delimiter_graph分词效果

要实现仅按-拆分令牌且保留原词的需求,你可以通过组合Elasticsearch的多个内置分词过滤器来完成,具体配置如下:

自定义分词器配置

首先创建包含自定义分析器的索引:

PUT /hyphen_split_index
{
  "settings": {
    "analysis": {
      "filter": {
        "hyphen_capture_filter": {
          "type": "pattern_capture",
          "preserve_original": true,
          "patterns": [
            "(.*?)-",
            "-(.+)"
          ]
        },
        "trim_empty": {
          "type": "trim"
        },
        "deduplicate": {
          "type": "unique",
          "only_on_same_position": true
        }
      },
      "analyzer": {
        "hyphen_splitter": {
          "type": "custom",
          "tokenizer": "keyword",
          "filter": [
            "hyphen_capture_filter",
            "trim_empty",
            "deduplicate"
          ]
        }
      }
    }
  }
}

配置说明

  • keyword令牌生成器:将整个输入文本作为单个令牌输出,确保原词(如i-pod)被完整保留。
  • hyphen_capture_filter模式捕获过滤器:
    • preserve_original: true 保留原始令牌
    • 正则(.*?)-捕获-左侧的所有内容,-(.+)捕获-右侧的所有内容,以此拆分出子令牌
  • trim_empty修剪过滤器:清理可能出现的空令牌(例如输入文本以-开头/结尾的场景)
  • deduplicate去重过滤器:移除同一位置的重复令牌,避免冗余

测试效果

测试带-的文本

POST /hyphen_split_index/_analyze
{
  "analyzer": "hyphen_splitter",
  "text": "i-pod"
}

输出令牌:["i-pod", "i", "pod"],符合需求。

测试带_的文本

POST /hyphen_split_index/_analyze
{
  "analyzer": "hyphen_splitter",
  "text": "i_pod"
}

输出令牌:["i_pod"],未被拆分,符合预期。

扩展说明

如果需要支持多个指定分隔符(比如同时按-和|拆分),只需修改patterns中的正则表达式:

"patterns": [
  "(.*?)([-|])",
  "([-|])(.+)"
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:15:27