ElasticSearch Client使用常见问题总结

406报错

elasticsearch.ApiError: ApiError(406, 'Content-Type header [application/vnd.elasticsearch+x-ndjson; compatible-with=8] is not supported', 'Content-Type header [application/vnd.elasticsearch+x-ndjson; compatible-with=8] is not supported')

原因

Elasticsearch client(python Elasticsearch)版本号与server版本号不一致。

解决方案

查看server端Elasticsearch版本,可以使用以下几种方法之一:

  1. 通过API请求:使用curl或类似工具向Elasticsearch的根端点发送GET请求。例如:

    sh 复制代码
    curl -XGET http://your-elasticsearch-host:9200/

    在返回的JSON响应中,您将看到版本号信息。

  2. 通过Kibana Dev Tools:如果您使用Kibana,可以在Kibana的Dev Tools中执行相同的API请求,以查看版本号。

  3. 通过Elasticsearch的安装目录 :在Elasticsearch的安装目录中,可以找到版本信息的文件。例如,在Linux系统上,版本信息通常位于/usr/share/elasticsearch/目录下的README.txt文件中。

  4. 通过日志文件:启动Elasticsearch时,日志文件通常会记录版本信息。您可以查看Elasticsearch的日志文件以获取版本信息。

本地代码中安装与server端版本相同的client 例如: 假设Elasticsearch server版本为 7.10.0 , 则本地安装方法如下:

bash 复制代码
pip install elasticsearch==7.10.0

401报错

AuthenticationException(401, 'security_exception', 'missing authentication credentials for REST request [/_bulk]')

原因

es client不同版本认证使用的参数名是不一样的,针对不同的版本需进行不同的设置

解决方案

  1. 对于elasticsearch 7.x及更高版本:

    • 使用http_auth参数设置HTTP身份验证。您可以将用户名和密码作为元组传递给http_auth参数。

    • 示例:

      python 复制代码
      from elasticsearch import Elasticsearch
      
      es = Elasticsearch(['localhost'], port=9200, http_auth=('username', 'password'))
  2. 对于elasticsearch 6.x版本:

    • 使用basic_auth参数设置基本身份验证。您可以将用户名和密码作为元组传递给basic_auth参数。

    • 示例:

      python 复制代码
      from elasticsearch import Elasticsearch
      
      es = Elasticsearch(['localhost'], port=9200, basic_auth=('username', 'password'))

404报错

'status': 404, 'error': {'type': 'index_not_found_exception', 'reason': 'no such index [index_sample] and [action.auto_create_index] contains [-*] which forbids automatic creation of the index',

原因

对应的index不存在,且server端禁用了auto create index。

解决方案

  1. 手动创建索引:在执行批量导入之前,手动创建index_sample索引。您可以使用以下代码创建索引:

    python 复制代码
    from elasticsearch import Elasticsearch
    
    # 连接到本地Elasticsearch实例
    es = Elasticsearch(['localhost'], port=9200)
    
    # 创建索引
    index_name = "index_sample"
    body = {
        "mappings": {
            "properties": {
                "name": {"type": "text"},
                "age": {"type": "integer"},
                "city": {"type": "text"}
            }
        }
    }
    es.indices.create(index=index_name, body=body)
  2. 启用自动创建索引功能:在Elasticsearch配置中将action.auto_create_index设置为*,以允许自动创建索引。请注意,这可能会带来安全风险,因为任何尝试写入不存在的索引的操作都会自动创建索引。要启用自动创建索引功能,您可以在elasticsearch.yml配置文件中添加以下配置:

    arduino 复制代码
    action.auto_create_index: "*"
相关推荐
郑州光合科技余经理25 分钟前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
李慕婉学姐1 小时前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
掘金酱1 小时前
「寻找年味」 沸点活动|获奖名单公示🎊
前端·人工智能·后端
颜酱1 小时前
栈的经典应用:从基础到进阶,解决LeetCode高频栈类问题
javascript·后端·算法
玹外之音2 小时前
Spring AI MCP 无状态服务器实战:构建AI智能用户管理系统
java·后端
what丶k2 小时前
Spring AI 多模态开发全解析:从入门到企业级落地
后端·spring·ai编程
ATCB2 小时前
零门槛!PythonAnywhere 免费部署全指南:不止 Django,这些项目都能搭(附主流平台对比)
后端·python·django
雨落Re2 小时前
从设计到开发,过年我用十天使用AI搭建了一个完整的博客系统
前端·后端
wuchen10042 小时前
网狐的异步引擎架构理解
架构·网狐
大囚长2 小时前
目前主流的可观测性架构
架构