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 相关文章推荐
对pandas中apply函数的用法详解
Apr 10 Python
Python机器学习库scikit-learn安装与基本使用教程
Jun 25 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
Django logging配置及使用详解
Jul 23 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
Python jieba库用法及实例解析
Nov 04 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
python中可以声明变量类型吗
Jun 18 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
python调用百度AI接口实现人流量统计
Feb 03 Python
Python xlwings插入Excel图片的实现方法
Feb 26 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
Django在win10下的安装并创建工程
2017/11/20 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
Python for循环与range函数的使用详解
2019/03/23 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
python使用建议技巧分享(三)
2020/08/18 Python
如何基于Python按行合并两个txt
2020/11/03 Python
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
药学专业个人自我评价
2013/11/11 职场文书
大学系主任推荐信范文
2013/12/24 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
MySQL开启事务的方式
2021/06/26 MySQL
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python
在Docker容器中部署SQL Server
2022/04/11 Servers