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

如何在ElasticSearch中启用n-gram分词以支持ngram文本搜索

Elasticsearch N-Gram 分词配置指南

一、核心逻辑

要实现N-Gram分词,需先创建自定义分词器(包含N-Gram过滤器),再在索引字段映射中指定使用该分词器,替代默认的standard分词。

二、具体配置步骤

1. 创建带N-Gram分词器的索引

先定义索引的settings和mappings,示例如下:

PUT /my_ngram_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_ngram_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "my_ngram_filter"]
        }
      },
      "filter": {
        "my_ngram_filter": {
          "type": "ngram",
          "min_gram": 2,  // 最小分词长度,可按需调整
          "max_gram": 5   // 最大分词长度,可按需调整
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "target_field": {  // 替换成你需要分词的字段名
        "type": "text",
        "analyzer": "my_ngram_analyzer",  // 索引阶段使用自定义分词器
        "search_analyzer": "standard"     // 搜索阶段可选standard,也可复用自定义分词器
      }
    }
  }
}
  • 关键参数说明:
    • min_gram/max_gram:控制分词片段的长度范围,比如设置2-5,会把"elasticsearch"拆成"el""ela""elas"等2到5字符的片段
    • search_analyzer:若设为standard,搜索词按标准分词后匹配索引中的N-Gram片段;若和索引分词器一致,搜索词也会被拆成N-Gram,适合全模糊匹配场景

2. 验证分词效果

用_analyze接口测试分词器是否生效:

POST /my_ngram_index/_analyze
{
  "analyzer": "my_ngram_analyzer",
  "text": "elasticsearch"
}

返回结果会显示拆分后的所有N-Gram片段,确认是否符合预期。

3. 通过Bulk API推送数据

索引创建完成后,正常使用Bulk API推送数据即可,目标字段会自动用配置的N-Gram分词器处理:

POST _bulk
{"index": {"_index": "my_ngram_index", "_id": "1"}}
{"target_field": "Elasticsearch is a distributed search engine"}
{"index": {"_index": "my_ngram_index", "_id": "2"}}
{"target_field": "N-gram分词适合前缀、中缀模糊搜索"}

4. 搜索测试

比如搜索"elastic",即使输入的是部分字符,也能匹配到包含"Elasticsearch"的文档:

POST /my_ngram_index/_search
{
  "query": {
    "match": {
      "target_field": "elastic"
    }
  }
}

三、注意事项

  • 调整min_gram和max_gram时要平衡性能与效果:过小会导致索引体积暴增,过大则失去模糊匹配的意义
  • 已存在的索引无法直接修改字段分词器,需重建索引并迁移数据
  • 若需要对搜索词也做N-Gram拆分,将search_analyzer设为my_ngram_analyzer即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.04 03:12:31