当前位置: 首页 > article >正文

批量创建ES索引

7.x

from elasticsearch import Elasticsearch

# 配置 Elasticsearch 连接
# 替换为你的 Elasticsearch 地址、端口、用户名和密码
es = Elasticsearch(
    ['http://10.10.x.x:43885'],
    basic_auth=('admin', 'XN272G9THEAPYD5N5QORX3PB1TSQELLB')
)

# # 测试连接
# try:
#     # 尝试获取集群的健康状态
#     health = es.cluster.health()
#     print("集群健康状态:")
#     print(f"  集群名称: {health.get('cluster_name')}")
#     print(f"  状态: {health.get('status')}")
#     print(f"  节点数量: {health.get('number_of_nodes')}")
#     print(f"  数据节点数量: {health.get('number_of_data_nodes')}")
#     print(f"  活跃主分片: {health.get('active_primary_shards')}")
#     print(f"  活跃分片: {health.get('active_shards')}")
#     print(f"  初始化中分片: {health.get('initializing_shards')}")
#     print(f"  未分配分片: {health.get('unassigned_shards')}")
#     print(f"  挂起的未分配分片: {health.get('delayed_unassigned_shards')}")
#     print(f"  待处理任务数: {health.get('number_of_pending_tasks')}")
#     print(f"  活跃分片百分比: {health.get('active_shards_percent_as_number')}%")
# except Exception as e:
#     print(f"连接或查询失败: {e}")

# 批量创建索引并设置每个索引的分片数为 2
try:
    for i in range(1000, 2000):  # 创建x个索引
        index_name = f"your_index_{i}"
        settings = {
            "settings": {
                "number_of_shards": 2,  # 设置2个分片
                "number_of_replicas": 1  # 可根据需要设置副本数
            }
        }
        response = es.indices.create(index=index_name, body=settings)
        # print(f"\n创建索引 '{index_name}' 结果:")
        # print(response)
except Exception as e:
    print(f"创建索引失败: {e}")

6.x

cluster.max_shards_per_node是不是在6.x版本限制不住呢???

在这里插入图片描述

在这里插入图片描述

from elasticsearch import Elasticsearch

es = Elasticsearch(
    ['http://10.10.x.x:30519'],
    headers={"Content-Type": "application/json"}  # 强制指定 Content-Type 为 application/json
)

# 创建索引
try:
    for i in range(2000, 3000):  # 创建1000个索引
        index_name = f"your_index_{i}"
        settings = {
            "settings": {
                "number_of_shards": 2,  # 设置2个分片
                "number_of_replicas": 1  # 可根据需要设置副本数
            }
        }
        response = es.indices.create(index=index_name, body=settings)
        print(response)  # 打印响应信息
except Exception as e:
    print(f"创建索引失败: {e}")

根据你提供的错误信息:

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

这是由于 Elasticsearch 版本Elasticsearch Python 客户端 之间的兼容性问题。具体来说,你可能正在使用一个与 Elasticsearch 版本不兼容的客户端,或者请求的 Content-Type 头部不符合目标 Elasticsearch 集群的要求。

解决方案:

1. 确认 Elasticsearch 版本
  • 确保你连接的 Elasticsearch 集群版本与你所使用的 Elasticsearch Python 客户端版本兼容。
  • 根据错误消息,似乎你的集群可能是基于 Elasticsearch 8.x 版本。你可以通过以下命令检查集群版本:
    curl -X GET "http://10.10.180.211:30519/_cluster/health?pretty"
    
    该命令会返回 Elasticsearch 集群的版本和健康状态等信息。
2. 更新 Elasticsearch Python 客户端版本
  • 确保你使用的是适用于 Elasticsearch 8.x 的 Python 客户端版本。如果你的集群是 Elasticsearch 8.x,使用较老的客户端(例如针对 7.x 版本的客户端)可能会导致此类错误。
  • 更新 Elasticsearch Python 客户端:
    pip install --upgrade elasticsearch
    
3. 指定正确的 Content-Type
  • 从错误信息来看,问题可能与请求的 Content-Type 头部有关。Elasticsearch 8.x 版本可能期望不同的 Content-Type 头部。

  • 你可以尝试通过 headers 参数手动指定请求的 Content-Type。例如:

    from elasticsearch import Elasticsearch
    
    es = Elasticsearch(
        ['http://10.10.180.211:30519'],
        headers={"Content-Type": "application/json"}  # 强制指定 Content-Type 为 application/json
    )
    
    # 创建索引
    try:
        for i in range(1000, 2000):  # 创建1000个索引
            index_name = f"your_index_{i}"
            settings = {
                "settings": {
                    "number_of_shards": 2,  # 设置2个分片
                    "number_of_replicas": 1  # 可根据需要设置副本数
                }
            }
            response = es.indices.create(index=index_name, body=settings)
    except Exception as e:
        print(f"创建索引失败: {e}")
    
4. 更新 Elasticsearch 客户端库的版本
  • 如果你已经确认 Elasticsearch 是 8.x 版本,并且使用了支持的客户端库版本,但仍然出现问题,你可以尝试将客户端库更新到最新版本。
    pip install elasticsearch==8.x  # 确保安装 8.x 版本的 Elasticsearch 客户端
    

pip3 install elasticsearch==6.8.2

5. 验证请求和响应
  • 如果问题依然存在,你可以通过打印响应并调试 requests 来验证发送的 HTTP 请求和 Elasticsearch 服务器返回的响应。例如:

    response = es.indices.create(index=index_name, body=settings)
    print(response)  # 打印响应信息
    
总结:
  • 确保你的 Python 客户端和 Elasticsearch 版本兼容,特别是在升级到 Elasticsearch 8.x 后,必须使用相应版本的 Python 客户端。
  • 尝试手动设置请求的 Content-Type 头部,确保其符合 Elasticsearch 8.x 的要求。
  • 通过更新客户端和检查日志,确保所有配置都是正确的。

如果以上方法仍然无法解决问题,请提供更多的详细信息,包括 Elasticsearch 集群的版本和你使用的客户端版本,这样我可以帮助你进一步定位问题。


http://www.kler.cn/a/519027.html

相关文章:

  • 27. 【.NET 8 实战--孢子记账--从单体到微服务】--简易报表--报表服务
  • 从规则到神经网络:机器翻译技术的演进与未来展望
  • 2025美赛数学建模C题:奥运金牌榜,完整论文代码模型目前已经更新
  • FreeBSD里制作ubuntu22 jammy兼容环境的脚本
  • Android AOP:aspectjx
  • 蓝桥杯LQ1044 求完数
  • 【Rust自学】14.5. cargo工作空间(Workspace)
  • Commander 一款命令行自定义命令依赖
  • 国自然重点项目|代谢影像组学只能预测肺癌靶向耐药的关键技术与应用|基金申请·25-01-25
  • 10.片元
  • 第14章 7种单例设计模式的设计(Java高并发编程详解:多线程与系统设计)
  • ubuntu18.04安装nvm管理本机node和npm
  • macos的图标过大,这是因为有自己的设计规范
  • 【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测
  • Coze,Dify,FastGPT,对比
  • 计算机的错误计算(二百二十二)
  • BGP分解实验·11——路由聚合与条件性通告(3)
  • 再述 Dijkstra
  • 【Elasticsearch】聚合分析:度量聚合
  • 互动视频还是游戏?还是?世界模型
  • nginx部署前端项目
  • docker-compose篇---创建jupyter并可用sudo的创建方式
  • MySQL 基础学习(2): INSERT 操作
  • CLion入门2.0(优雅进行STM32和ESP32开发)(船新版本)
  • 【2025年数学建模美赛F题】(顶刊论文绘图)模型代码+论文
  • 将 OneLake 数据索引到 Elasticsearch - 第二部分