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

Elasticsearch自定义分析器设为索引默认失败,报错Unknown analyzer type

如何将自定义Elasticsearch分析器设为索引默认分析器?

已创建可正常工作的自定义分析器,但无法将其设为索引默认分析器,只能为每个字段单独配置。由于索引映射会随时间变化,希望避免为新增字段重复配置分析器,因此设置默认分析器十分重要。

创建索引的JSON内容:

{
    "settings": {
        "analysis": {
            "char_filter": {
                "my_mappings_char_filter": {
                    "type": "mapping",
                    "mappings": [
                        "- => ¡h¡",
                    ],
                }
            },
            "analyzer": {
                "test_analyzer": {
                    "tokenizer": "whitespace",
                    "char_filter": ["my_mappings_char_filter"],
                    "filter": ["lowercase"]
                },
                "default": {
                    "type": "test_analyzer"
                }
            },
        }
    },
}

返回错误(状态码400):

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "Unknown analyzer type [test_analyzer] for [default]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "Unknown analyzer type [test_analyzer] for [default]"
  },
  "status": 400
}

问题原因

你当前的写法错误:在analyzer下定义default分析器时,直接指定type: "test_analyzer",Elasticsearch会把test_analyzer当成内置分析器类型,而非你自定义的分析器名称,因此报错“未知分析器类型”。

解决方法

完全可以将自定义分析器设为默认,有两种正确方式:

方式一:索引级别设置默认分析器(推荐)

在settings.analysis下定义好自定义分析器后,添加index.default_analyzer参数指定自定义分析器名称:

{
    "settings": {
        "analysis": {
            "char_filter": {
                "my_mappings_char_filter": {
                    "type": "mapping",
                    "mappings": [
                        "- => ¡h¡"
                    ]
                }
            },
            "analyzer": {
                "test_analyzer": {
                    "tokenizer": "whitespace",
                    "char_filter": ["my_mappings_char_filter"],
                    "filter": ["lowercase"]
                }
            },
            "index.default_analyzer": "test_analyzer"
        }
    }
}

方式二:映射级别设置默认分析器

在mappings的文档类型下(如_doc)直接指定analyzer为自定义分析器名称:

{
    "settings": {
        "analysis": {
            "char_filter": {
                "my_mappings_char_filter": {
                    "type": "mapping",
                    "mappings": [
                        "- => ¡h¡"
                    ]
                }
            },
            "analyzer": {
                "test_analyzer": {
                    "tokenizer": "whitespace",
                    "char_filter": ["my_mappings_char_filter"],
                    "filter": ["lowercase"]
                }
            }
        },
        "mappings": {
            "_doc": {
                "analyzer": "test_analyzer",
                "properties": {}
            }
        }
    }
}

说明

两种方式都能让自定义分析器成为默认,所有未单独指定分析器的新增字段都会自动使用它。其中方式一的索引级别设置优先级更高,是更通用的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:01:09