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

Elasticsearch 8.3.3:如何创建可生成所有可能分词的分析器?

Elasticsearch 自定义分析器解决方案

针对你需要生成指定分词的需求,以下是适用于Elasticsearch 8.3.3的自定义分析器实现:

1. 创建索引与自定义分析器

PUT /filename_index
{
  "settings": {
    "analysis": {
      "char_filter": {
        "filename_ext_split": {
          "type": "pattern_replace",
          "pattern": "([a-zA-Z]+)\\.[^\\s]+",
          "replacement": "$1 $0"
        }
      },
      "analyzer": {
        "comprehensive_filename_analyzer": {
          "char_filter": ["filename_ext_split"],
          "tokenizer": "whitespace",
          "filter": [
            "hyphen_part_capture",
            "unique",
            "filename_shingles"
          ]
        }
      },
      "filter": {
        "hyphen_part_capture": {
          "type": "pattern_capture",
          "preserve_original": true,
          "patterns": [
            "^([A-Za-z]+)",
            "^([A-Za-z]+-\\d+)",
            "(-\\d+-\\d+$)",
            "(\\d+-\\d+$)",
            "(-\\d+$)",
            "(\\d+$)"
          ]
        },
        "filename_shingles": {
          "type": "shingle",
          "min_shingle_size": 2,
          "max_shingle_size": 2,
          "output_unigrams": true
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "filename": {
        "type": "text",
        "analyzer": "comprehensive_filename_analyzer"
      }
    }
  }
}

2. 分析器组件说明

  • char_filter: filename_ext_split:将带扩展名的文件名(如xyz.pdf)转换为xyz xyz.pdf,确保后续能生成xyz和xyz.pdf两个基础分词。
  • tokenizer: whitespace:按空格分割文本,得到初始分词列表(如AB-12-1993、xyz、xyz.pdf)。
  • filter: hyphen_part_capture:通过正则捕获从连字符分割的字符串中提取所需子串,包括:
    • 前缀字母部分(如AB)
    • 字母加前一段数字(如AB-12)
    • 带前缀连字符的后两段数字(如-12-1993)
    • 后两段数字(如12-1993)
    • 带前缀连字符的最后一段数字(如-1993)
    • 最后一段数字(如1993)
    • 保留原始分词(如AB-12-1993)
  • filter: unique:移除重复生成的分词(如重复的xyz)。
  • filter: filename_shingles:生成相邻分词的组合,如AB-12-1993 xyz和AB-12-1993 xyz.pdf,同时保留所有单个分词。

3. 测试分析器

执行以下请求验证分词结果:

POST /filename_index/_analyze
{
  "analyzer": "comprehensive_filename_analyzer",
  "text": "AB-12-1993 xyz.pdf"
}

生成的核心分词(含所有要求的分词):

  • AB
  • AB-12
  • -12-1993
  • 12-1993
  • -1993
  • 1993
  • xyz
  • xyz.pdf
  • AB-12-1993 xyz
  • AB-12-1993 xyz.pdf

额外生成的分词(如AB-12-1993、AB AB-12等)均为可接受的冗余分词。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:40:34