Python Elasticsearch DSL如何使用


答案:Python Elasticsearch DSL 提供了更便捷的面向对象方式操作 Elasticsearch,通过安装 elasticsearch-dsl 库并连接服务后,可定义 Document 模型映射字段与索引设置,调用 init() 创建索引,使用 s*e() 添加文档,Search 类构建 match、term、range 等查询,支持 bool 组合与聚合分析,还可通过 get() 更新或 delete() 删除文档,结合 bulk 实现高效批量写入,适用于复杂检索场景。

python elasticsearch dsl如何使用

Python Elasticsearch DSL 是一个用于与 Elasticsearch 进行交互的高级库,它封装了官方的 elasticsearch-py 客户端,提供了更直观、更 Pythonic 的方式来构建查询和操作数据。下面介绍如何使用它进行常见操作。

安装依赖

首先需要安装 elasticsearch-dsl:

pip install elasticsearch-dsl

确保你已经运行了 Elasticsearch 服务(例如本地启动在 http://localhost:9200)。

连接到 Elasticsearch

使用 connections 模块配置连接:

from elasticsearch_dsl import connections

# 连接到本地 ES 实例
connections.create_connection(hosts=['localhost'], port=9200, timeout=20)

也可以传入多个节点或使用 URL:

connections.create_connection(hosts=['http://user:pass@localhost:9200'])

定义文档模型(Document)

通过继承 Document 类定义索引结构和字段类型:

from elasticsearch_dsl import Document, Text, Keyword, Integer, Date

class Article(Document):
title = Text(analyzer='ik_max_word', search_analyzer='ik_smart')
content = Text(analyzer='ik_max_word')
author = Keyword()
views = Integer()
created_at = Date()

class Index:
name = 'articles' # 索引名称
settings = {
"number_of_shards": 1,
"number_of_replicas": 0
}

说明:

  • Text:会被分词,适合全文检索
  • Keyword:不分词,用于精确匹配(如作者名)
  • DateInteger 等对应基本类型
  • Index.name 指定索引名
  • 可设置分词器(如中文推荐 ik 分词器)

创建索引(映射):

Article.init() # 创建索引并应用 mapping

添加和保存文档

创建并保存一条记录:

article = Article(
title="Python 使用 Elasticsearch",
content="本文介绍 elasticsearch-dsl 的用法",
author="张三",
views=100,
created_at="2025-04-05"
)
article.s*e() # 写入 ES

指定 ID 保存:

article.s*e(id=1)

查询数据(Search API)

使用 Search 类进行复杂查询:

from elasticsearch_dsl import Search

s = Search().index('articles')
s = s.query("match", title="Python")
response = s.execute()

遍历结果:

PPT.CN,PPTCN,PPT.CN是什么,PPT.CN官网,PPT.CN如何使用 PPT.CN,PPTCN,PPT.CN是什么,PPT.CN官网,PPT.CN如何使用

一键操作,智能生成专业级PPT

PPT.CN,PPTCN,PPT.CN是什么,PPT.CN官网,PPT.CN如何使用 37 查看详情 PPT.CN,PPTCN,PPT.CN是什么,PPT.CN官网,PPT.CN如何使用 for hit in response:
print(hit.title, hit.author, hit.meta.score)

常用查询类型:

  • query("match", field="value"):全文匹配
  • query("term", author="张三"):精确匹配(Keyword 字段)
  • query("range", views={"gte": 50}):范围查询
  • query(~Q("match", title="Elasticsearch")):使用 ~ 表示否定

组合查询(bool 查询):

from elasticsearch_dsl import Q

s = Search().index('articles')
s = s.query('bool',
must=[Q('match', title='Python')],
filter=[Q('term', author='张三')])

聚合操作(Aggregations)

执行统计聚合:

s.aggs.bucket('by_author', 'terms', field='author')
s.aggs.metric('*g_views', '*g', field='views')

获取聚合结果:

response = s.execute()
for bucket in response.aggregations.by_author.buckets:
print(bucket.key, bucket.doc_count)

更新和删除文档

根据 ID 获取并修改:

article = Article.get(id=1)
article.views = 150
article.s*e()

部分更新(仅更新某些字段):

article.update(views=200)

删除文档:

article.delete()

删除整个索引:

Article._index.delete()

批量操作(Bulk Operations)

使用 bulk 批量写入提升性能:

from elasticsearch.helpers import bulk
from elasticsearch_dsl import Index

def bulk_index(data_list):
actions = []
for data in data_list:
action = {
"_index": "articles",
"_source": data
}
actions.append(action)
bulk(client=connections.get_connection(), actions=actions)

或者使用 DocType 的批量支持(较旧版本)或自定义生成器。

小贴士

  • 中文分词建议安装并启用 IK 分词器插件
  • 生产环境注意设置合理的超时和重试机制
  • 可以结合 Django 或 Flask 使用,有相应集成包
  • 使用 .scan() 遍历大量数据(替代 from/size 分页)
  • 调试时可用 print(s.to_dict()) 查看生成的 DSL 查询语句

基本上就这些。掌握定义模型、增删改查、构造查询和聚合,就能高效使用 elasticsearch-dsl。

以上就是Python Elasticsearch DSL如何使用的详细内容,更多请关注其它相关文章!


# 与非  # 前后端不分离seo  # 海口平原网站建设  # 校园seo优化流程  # 广西网站建设升级  # 湖北网站优化设计公司  # 网站推广发布什么内容  # 崇安区网站推广渠道优化  # 网站建设推广优化  # 百度推广云南营销中心  # 金山区小家电营销推广  # 是一个  # 中带  # word  # 连接到  # 新和  # 遍历  # 面向对象  # 官网  # 如何使用  # 文档  # 2025  # django  # app  # go  # python 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《密马》发布账号方法  荣耀magicv5怎么上手测评  偃武诸葛亮阵容搭配推荐  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  中大网校app做题记录清除方法  学习通网页版个人登录_学习通网页版个人账户登录入口  win11如何开启单声道音频 Win11为听障用户合并左右声道【辅助】  从J*a应用程序中导出MySQL表数据的技术指南  鸿蒙单条备忘录如何加密  TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法  电脑“无法访问指定设备、路径或文件”怎么办?五种权限设置方法  AO3中文入口稳定分享_AO3官网HTTPS看文详解  Go反射进阶:访问内嵌结构体中的被遮蔽方法  德邦快递会员怎么开通  掌握产品代码正则表达式:避免常见陷阱与精确匹配  yy漫画登录页面官方入口_yy漫画在线阅读网址入口  J*aScript模拟悬停与点击:自动化网页动态元素交互指南  高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法  rabbitmq 持久化有什么缺点?  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  使用VS Code调试Python代码:从入门到精通  Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】  《桃源记2》资源采集攻略  无人机考证官网 中国民航无人机考证官网登录入口  如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?  泰拉瑞亚水晶无法放置问题  steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  在VS Code中进行数据科学和机器学习开发  苹果SE如何开启单手模式_苹果SE单手操作功能  QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  《搜书吧》阅读书籍方法  C++ static关键字作用_C++静态成员变量与静态函数  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗  《绝区零》2.3前瞻|直播|内容介绍  t3出行如何使用微信支付  《腾讯相册管家》注销账号方法  Go Goroutine调度与并发执行深度解析  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  CSS过渡与滚动滚动事件结合应用_scroll与transition动画  Python中安全地将环境变量转换为整数的类型注解指南  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  Golang如何测试结构体方法_Golang reflect方法测试与调用技巧  @Team是什么?揭秘团队含义  OpenWeatherMap API:通过城市名称获取天气预报数据指南  mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法  淘口令快速解析技巧  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局 

 2025-11-15

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.