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

使用Elasticsearch Python客户端创建自定义分析器返回400错误如何解决

问题原因

你的配置存在多余的嵌套层级,和ignore=400参数没有关系。
你在settings.py中定义的settings变量本身已经包含"settings"外层键,而Python Elasticsearch客户端的indices.create方法的settings参数只需要接收settings键对应的内层配置内容,不需要额外套一层settings。这就导致最终发送给ES的请求中,配置路径变成了index.settings.settings.analysis.*,ES无法识别这类路径的配置,所以抛出了找不到对应配置的异常。
ignore=400参数的作用只是让客户端收到400状态码时不直接抛出异常,而是返回完整的响应内容,并不是引发错误的原因。

解决方案

有两种修改方式任选其一即可:

方式1:修改settings.py中的配置定义

去掉外层的settings键,直接保留analysis相关的配置:

settings = {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": { 
          "char_filter": [
            "emoticons"
          ],
          "tokenizer": "punctuation",
          "filter": [
            "lowercase",
            "english_stop"
          ]
        }
      },
      "tokenizer": {
        "punctuation": { 
          "type": "pattern",
          "pattern": "[ .,!?]"
        }
      },
      "char_filter": {
        "emoticons": { 
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      "filter": {
        "english_stop": { 
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
}

方式2:调用创建索引方法时传入内层配置

如果不想修改settings.py的原有定义,在调用indices.create方法时,传入settings["settings"]作为参数即可:

self.es_client.indices.create(index=index_name, ignore=400, mappings=mapping, settings=settings["settings"])

修改完成后重新执行创建索引的操作,即可正常创建带自定义分析器的索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:02