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

Elasticsearch标准分词器数字后点拆分问题的解决方案咨询

解决Standard Tokenizer拆分数字后域名的问题

问题原因

Standard Tokenizer的Unicode文本分割规则中,当点号前后是「字母+数字」组合时(比如example2.com里的2.),会触发拆分;而纯字母前后的点号会被识别为邮箱的一部分,因此example.com能保留为单个token,example2.com则被拆成example2和com。

解决方案

方案1:使用UAX URL Email Tokenizer(推荐)

这是Standard Tokenizer的扩展版本,专门针对邮箱、URL这类格式优化,会完整保留整个邮箱作为单个token,不受域名中数字的影响。

创建索引时配置自定义分析器:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "email_analyzer": {
          "tokenizer": "uax_url_email"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "email": {
        "type": "text",
        "analyzer": "email_analyzer"
      }
    }
  }
}

测试分析结果:

POST /my_index/_analyze
{
  "analyzer": "email_analyzer",
  "text": "john.smith@example2.com"
}

返回的token为john.smith@example2.com,此时搜索example2.com就能匹配到对应的记录。

方案2:自定义分析器调整拆分规则

如果需要保留Standard Tokenizer的基础行为,仅修改数字后点号的拆分逻辑,可以结合Word Delimiter Token Filter配置:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "custom_email_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "custom_word_delimiter"
          ]
        }
      },
      "filter": {
        "custom_word_delimiter": {
          "type": "word_delimiter",
          "split_on_numerics": false,
          "preserve_original": true
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "email": {
        "type": "text",
        "analyzer": "custom_email_analyzer"
      }
    }
  }
}
  • split_on_numerics: false:禁止因数字与字母/符号的组合触发拆分
  • preserve_original: true:保留原始邮箱字符串作为一个token,同时保留拆分后的子token(如john.smith、example2.com),兼顾多场景搜索需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:13:38