news 2026/5/6 0:58:56

Elasticsearch 8.x + Python 官方客户端实战教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Elasticsearch 8.x + Python 官方客户端实战教程

Elasticsearch 8.x + Python 官方客户端实战教程

一、Elasticsearch 基础概念(工程视角)

1. Index(索引)

  • 类似数据库中的表
  • 一个 Index 通常对应一个业务实体集合,例如:
    • user_logs
    • order_records

⚠️工程建议

  • 一个索引只服务一种查询模式
  • 不要把“所有数据”塞进一个 index

2. Document(文档)

  • 一条 JSON 数据
  • 每条文档都有_id
{"user_id":"u123","action":"login","timestamp":"2025-01-01T10:00:00"}

3. Mapping(字段结构)

  • 相当于表结构定义
  • 决定:
    • 是否可搜索
    • 是否可聚合
    • 是否支持排序

一旦字段类型确定,几乎不可修改


4. Shard / Replica(分片 & 副本)

  • shard:数据拆分单元(影响写入 & 查询性能)
  • replica:副本(高可用 & 查询吞吐)

通用建议:

  • 中小业务:1~3shards
  • 副本数:1

二、Elasticsearch 8.x 架构与安全机制

8.x 开始默认开启安全机制

  • HTTPS
  • 用户认证
  • API 访问权限

👉Python 客户端必须显式配置认证


三、Python 官方客户端安装(8.x)

pipinstallelasticsearch>=8.12.0

验证版本:

fromelasticsearchimport__version__print(__version__)

四、Python 连接 Elasticsearch(生产可用)

1. 基础连接(用户名 + 密码)

fromelasticsearchimportElasticsearch es=Elasticsearch(hosts=["https://localhost:9200"],basic_auth=("elastic","your_password"),verify_certs=False# 本地测试可关闭,生产请开启)print(es.info())

2. HTTPS + CA 证书(生产推荐)

es=Elasticsearch(hosts=["https://es-prod.example.com:9200"],basic_auth=("elastic","password"),ca_certs="/etc/elasticsearch/certs/http_ca.crt")

五、索引设计与创建(真实工程示例)

1. 索引 Mapping 设计

INDEX_NAME="user_action_logs"mapping={"settings":{"number_of_shards":2,"number_of_replicas":1},"mappings":{"properties":{"user_id":{"type":"keyword"},"action":{"type":"keyword"},"message":{"type":"text"},"ip":{"type":"ip"},"created_at":{"type":"date"}}}}

2. 创建索引(幂等)

ifnotes.indices.exists(index=INDEX_NAME):es.indices.create(index=INDEX_NAME,body=mapping)

六、数据写入(单条 & 批量)

1. 单条写入(index)

es.index(index=INDEX_NAME,id="u123_001",document={"user_id":"u123","action":"login","message":"user login success","ip":"127.0.0.1","created_at":"2025-01-01T10:00:00"})

2. 批量写入(bulk,生产必用)

fromelasticsearch.helpersimportbulk actions=[]foriinrange(1000):actions.append({"_index":INDEX_NAME,"_id":f"u123_{i}","_source":{"user_id":"u123","action":"click","message":f"click{i}","ip":"127.0.0.1","created_at":"2025-01-01T10:00:00"}})bulk(es,actions,request_timeout=60)

工程建议

  • 单批 500~2000 条
  • 明确_id,保证幂等

七、查询(核心能力)

1. 基础查询

res=es.search(index=INDEX_NAME,query={"term":{"action":"login"}})

2. Bool 查询(真实业务)

res=es.search(index=INDEX_NAME,query={"bool":{"must":[{"term":{"user_id":"u123"}}],"filter":[{"range":{"created_at":{"gte":"now-1d"}}}]}},size=20,sort=[{"created_at":"desc"}])

3. 聚合查询

res=es.search(index=INDEX_NAME,size=0,aggs={"action_count":{"terms":{"field":"action"}}})

八、深分页解决方案

❌ from + size(禁止大页)

  • 超过 10k 会严重影响性能

search_after(推荐)

res=es.search(index=INDEX_NAME,size=10,sort=[{"created_at":"desc"},{"_id":"desc"}])last_sort=res["hits"]["hits"][-1]["sort"]res_next=es.search(index=INDEX_NAME,size=10,search_after=last_sort,sort=[{"created_at":"desc"},{"_id":"desc"}])

九、工程级 Client 封装示例

classESClient:def__init__(self,hosts,username,password,ca_certs=None):self.client=Elasticsearch(hosts=hosts,basic_auth=(username,password),ca_certs=ca_certs,)defindex_doc(self,index,doc_id,doc):returnself.client.index(index=index,id=doc_id,document=doc)defsearch(self,index,query,size=10):returnself.client.search(index=index,query=query,size=size)

十、常见踩坑总结(8.x)

  1. ❌ 使用body=写 search(已废弃)
  2. ❌ 忽略 HTTPS / 认证
  3. ❌ 动态 Mapping 失控
  4. ❌ 大分页 from + size

十一、结语

如果你:

  • 正确设计索引
  • 使用 bulk 写入
  • 使用 bool + filter 查询
  • 合理分页
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 12:02:24

Simple Icons 终极指南:快速掌握3000+品牌SVG图标的高效使用技巧

Simple Icons 终极指南:快速掌握3000品牌SVG图标的高效使用技巧 【免费下载链接】simple-icons 项目地址: https://gitcode.com/gh_mirrors/sim/simple-icons 在现代Web开发中,品牌图标是不可或缺的设计元素。Simple Icons作为一个拥有3000多个开…

作者头像 李华
网站建设 2026/5/5 9:13:22

如何快速掌握MouseTester:鼠标性能诊断的完整解决方案

如何快速掌握MouseTester:鼠标性能诊断的完整解决方案 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester 还在为游戏中的瞄准不准而烦恼?或是设计工作时鼠标轨迹不够平滑影响创作效率?MouseTes…

作者头像 李华
网站建设 2026/5/5 22:24:30

Netcode for GameObjects Boss Room 多人RPG战斗(11)

Unity Boss Room 角色系统 1. 角色系统 Unity Boss Room项目采用了客户端-服务器分离的角色架构,通过模块化设计实现了角色的网络同步、AI行为、移动控制和战斗逻辑。 核心组件结构 组件 职责 文件位置 ServerCharacter 服务器端角色核心逻辑 ClientCharacter 客户端角色可…

作者头像 李华
网站建设 2026/5/2 19:18:55

Netcode for GameObjects Boss Room 多人RPG战斗(16)

Boss Room动作系统 1. 动作系统 Boss Room的动作系统是一个基于对象池的网络同步动作框架,为角色提供了统一的动作执行和管理机制。系统采用了服务器权威的设计模式,同时支持客户端预测以提升游戏体验。 2. 核心组件架构 2.1 核心基类与接口 组件 职责 文件位置 Action 所…

作者头像 李华
网站建设 2026/4/27 3:38:14

【OpenGL ES】在Windows上手撕一个mini版的渲染框架

1 前言1.1 开发该框架的动机​ OpenGL ES 是一个渲染指令接口集合,每渲染一帧图像都是一系列渲染指令的排列组合。常用的渲染指令约有 70 个,记住这些渲染指令及其排列组合方式,是一件痛苦的事情。另外,在图形开发中,经…

作者头像 李华
网站建设 2026/5/4 22:37:16

推荐系统中的损失函数梳理:从Pointwise到Listwise

引言:目标决定损失函数选择推荐系统通常采用两阶段架构:召回(Recall)与精排(Ranking)。两个阶段的优化目标存在本质差异,这直接决定了损失函数的选择。召回阶段从海量候选集(百万至亿…

作者头像 李华