Elasticsearch py客户端库安装及使用方法解析


Posted in Python onSeptember 14, 2020

一、介绍

elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库。为什么说它是一个low-level的客户端库呢?因为它只是对elasticsearch的rest API接口做了一层简单的封装,因此提供了最大的灵活性,但是于此同时使用起来就不是太方便。相对于这个low-level的客户端库,官方还提供了一个high-level的python客户端库:elasticsearch-dsl,这个会在另一篇文章中介绍。

更多介绍参见官方文档:https://elasticsearch-py.readthedocs.io/en/master/

二、安装

不同的elasticsearch版本要求不同的客户端版本,所以安装的时候需要根据你的elasticsearch来决定,下面是一个简单的参考:

# Elasticsearch 6.x
elasticsearch>=6.0.0,<7.0.0
# Elasticsearch 5.x
elasticsearch>=5.0.0,<6.0.0
# Elasticsearch 2.x
elasticsearch>=2.0.0,<3.0.0

在兼容的大的版本号下尽量选择最新的版本。

pip install elasticsearch

三、API

3.1 API文档

所有API都尽可能紧密的映射原始的rest API。

3.1.1 全局选项

某些被客户端添加的参数可以使用在所有的API上。

1.ignore

被用户忽略某些http错误状态码。

from elasticsearch import Elasticsearch
es = Elasticsearch()

# ignore 400 cause by IndexAlreadyExistsException when creating an index
es.indices.create(index='test-index', ignore=400)

# ignore 404 and 400
es.indices.delete(index='test-index', ignore=[400, 404])

2.timeout

被用于设置超时时间。

# only wait for 1 second, regardless of the client's default
es.cluster.health(wait_for_status='yellow', request_timeout=1)

3.filter_path

被用于过滤返回值。

es.search(index='test-index', filter_path=['hits.hits._id', 'hits.hits._type'])

3.1.2 Elasticsearch

Elasticsearch是一个low-level客户端,提供了一个从python到es rest端点的直接映射。这个实例拥有属性cat、cluster、indices、ingest、nodes、snapshot和tasks,通过他们可以访问CatClient、ClusterClient、IndicesClient、IngestClient、NodesClient、SnapshotClient和TasksClient的实例。

elasticsearch类包含了操作elasticsearch许多常用方法,例如:get、mget、search、index、bulk、create、delete等,这些方法的具体用法,可以参考elasticsearch-py的官方文档。

在执行以上方法之前,首先需要获得一个elasticsearch的实例,而获取这个实例有两个方法,一个是给elasticsearch的初始化函数传递一个connection class实例,另一个是给elasticsearch的初始化函数传递要连接的node的host和port,其实最终这些host、port还是被传递给了connection class。

# create connection to localhost using the ThriftConnection
es = Elasticsearch(connection_class=ThriftConnection)

# connect to localhost directly and another node using SSL on port 443
# and an url_prefix. Note that ``port`` needs to be an int.
es = Elasticsearch([
  {'host': 'localhost'},
  {'host': 'othernode', 'port': 443, 'url_prefix': 'es', 'use_ssl': True},
])

3.1.3 Indices

indices用于操作、查询关于索引的信息,或者可以说是操作、查询索引相关的元数据。

3.1.4 Ingest

ingest是一个插件,用于丰富插入数据的插入。

3.1.5 Cluster

cluster用于获取和集群相关的信息,例如:集群的健康状态、settings等。

3.1.6 Nodes

nodes用于获取和节点相关的信息。

3.1.7 Cat

cat可以用来获取别名、分片信息、文档数量等信息。

3.1.8 Snapshot

snapshot用于管理快照。

3.1.9 Tasks

tasks是用于任务管理的,官方文档上提示该task是新特性,未来可能会改变,所以要注意。

3.2 X-Pack APIs

X-Pack是Elastic Stack扩展,它将安全性,警报,监视,报告和图形功能捆绑到一个易于安装的程序包中。

  • 3.2.1 Info
  • 3.2.2 Graph Explore
  • 3.3.3 Licensing API
  • 3.3.4 Machine Learning
  • 3.3.5 Security APIS
  • 3.3.6 Watcher APIS
  • 3.3.7 Migration APIS

3.3 异常

这一节展示了使用elasticsearch-py时可能抛出的异常。

3.4 连接层API

connection是负责与集群连接的类。

3.4.1 Transport

transport封装与逻辑相关的传输。处理各个连接的实例化,并创建一个连接池来保存它们。

3.4.2 Connection Pool

connection pool是一个连接池,用于管理连接。

3.4.3 Connection Selector

connection selector是一个连接选择器,它最好的一个例子是zone-aware选择,可以自动选择本地连接,只有当本地node都无法连接是才会去选择连接其他node。

3.4.4 Urllib3HttpConnection

默认connection class。

3.5 传输类

传输模块列出了可以被当做elasticsearch初始化参数connection_class的connection class。

3.5.1 Connection

connection负责管理与elasticsearch节点的连接。

3.5.2 Urllib3HttpConnection

基于urllib的connection class,是默认connection class。

3.5.3 RequestsHttpConnection

基于requests的connection class,除非要使用requests相关的高级特性,否则建议不要使用该类。

3.6 helpers

helpers是一个简单的辅助函数的集合,这些函数抽象了一些细节或原始API。

3.6.1 bulk helpers

bulk API的特定格式要求导致直接使用它们会非常复杂,因此这里提供了几个bulk API的helper函数,具体使用方法可以参考elasticsearch-py的官方文档。

3.6.2 scan

scan是对scroll API的简单抽象。

3.6.3 reindex

reindex用于将可能满足给定查询的一个索引中的所有文档重新索引到另一个索引

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
Python基于生成器迭代实现的八皇后问题示例
May 23 Python
使用Template格式化Python字符串的方法
Jan 22 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
python语言中有算法吗
Jun 16 Python
详解Python yaml模块
Sep 23 Python
使用python将微信image下.dat文件解密为.png的方法
Nov 30 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 Python
基于python实现简单网页服务器代码实例
Sep 14 #Python
用python绘制樱花树
Oct 09 #Python
Python logging日志库空间不足问题解决
Sep 14 #Python
Python grpc超时机制代码示例
Sep 14 #Python
python/golang 删除链表中的元素
Sep 14 #Python
Python基于pillow库实现生成图片水印
Sep 14 #Python
python/golang实现循环链表的示例代码
Sep 14 #Python
You might like
PHP4.04简明安装
2006/10/09 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
Yii核心验证器api详解
2016/11/23 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python中去空格函数的用法
2014/08/21 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
如何基于python实现归一化处理
2020/01/20 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
平面设计师工作职责范文
2013/12/03 职场文书
家长给幼儿园的表扬信
2014/01/09 职场文书
销售辞职报告范文
2014/01/12 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
数学系个人求职信范文
2014/01/30 职场文书
班主任寄语大全
2014/04/04 职场文书
个人委托书范本
2014/09/13 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python