Python操作es

操作几个方面

  • 结果过滤,对于返回结果做过滤,主要是优化返回内容。
  • 直接操作elasticsearch对象,处理一些简单的索引信息。一下几个方面都是建立在es对象的基础上。
  • Indices,关于索引的细节操作,比如创建自定义的mappings。
  • Cluster,关于集群的相关操作。
  • Nodes,关于节点的相关操作。
  • Cat API,换一种查询方式,一般的返回都是json类型的,cat提供了简洁的返回结果。
  • Snapshot,快照相关,快照是从正在运行的Elasticsearch集群中获取的备份。我们可以拍摄单个索引或整个群集的快照,并将其存储在共享文件系统的存储库中,并且有一些插件支持S3,HDFS,Azure,Google云存储等上的远程存储库。
  • Task Management API,任务管理API是新的,仍应被视为测试版功能。API可能以不向后兼容的方式更改。

结果过滤

  • filter_path参数用于过滤减少es返回信息,可以指定返回相关的内容,还支持一些通配符的操作*
 1 body = {
 2     "query": {
 3         "match": {
 4             "name": "成都"
 5         }
 6     }
 7 }
 8 # print(es.search(index="p1", body=body))
 9 print(es.search(index="p1", body=body, filter_path=["hits.hits"]))
10 print(es.search(index="p1", body=body, filter_path=["hits.hits._source"]))
11 print(es.search(index="p1", body=body, filter_path=["hits.hits._source", "hits.total"]))
12 print(es.search(index="p1", body=body, filter_path=["hits.*"]))
13 print(es.search(index="p1", body=body, filter_path=["hits.hits._*"]))

Elasticsearch(es对象 )

  • es.index 向指定索引添加更新文档 如果索引不存在就会创建,然后执行添加更新等操作
1 # print(es.index(index="p2", doc_type="doc", id=1, body={"name": "棒槌", "age": "18"}))  # 正常
2 # print(es.index(index="p2", doc_type="doc", id=2, body={"name": "棒棒哒", "age": 20}))  # 正常
3 # print(es.index(index="p2", doc_type="doc", body={"name": "熊大", "age": "10"}))  # 如果添加文档不带id自动会创建一个
  • es.get 查询索引中指定文档
1 # get(self, index, id, doc_type="_doc", params=None):
2 # print(es.get(index=‘p2‘, doc_type=‘doc‘, id=1))  # 正常
3 # print(es.get(index=‘p2‘, doc_type=‘doc‘))  # TypeError: get() missing 1 required positional argument: ‘id‘ 只能取单个文档对象
4 # print(es.get(index=‘p2‘, id=2))  # 要指定文档类型elasticsearch.exceptions.NotFoundError: NotFoundError(404, ‘{"_index":"p2","_type":"_doc","_id":"2","found":false}‘)
  • es.search 执行搜索查询并获取其匹配它可以跟复杂的查询条件
  1. index要搜索的以逗号分隔的索引名称列表; 使用_all 或空字符串对所有索引执行操作。
  2. doc_type 要搜索的以逗号分隔的文档类型列表; 留空以对所有类型执行操作。
  3. body 使用Query DSL(QueryDomain Specific Language查询表达式)的搜索定义。
  4. _source 返回_source字段的true或false,或返回的字段列表,返回指定字段。
  5. _source_exclude要从返回的_source字段中排除的字段列表,返回的所有字段中,排除哪些字段。
  6. _source_include_source字段中提取和返回的字段列表,跟_source差不多
1 # print(es.search(index=‘p2‘, body={"query": {"match": {"age": "10"}}}))
2 # print(es.search(index=‘p2‘, body={"query": {"match": {"age": "10"}}}, _source=[‘name‘, ‘age‘]))
3 # print(es.search(index=‘p2‘, body={"query": {"match": {"age": "10"}}}, _source_exclude=[‘age‘]))
4 print(es.search(index=‘p2‘, body={"query": {"match": {"age": "10"}}}, _source_include=[‘age‘]))

排除结果

{‘took‘: 3, ‘timed_out‘: False, ‘_shards‘: {‘total‘: 5, ‘successful‘: 5, ‘skipped‘: 0, ‘failed‘: 0}, ‘hits‘: {‘total‘: 2, ‘max_score‘: 0.2876821, ‘hits‘: [{‘_index‘: ‘p2‘, ‘_type‘: ‘doc‘, ‘_id‘: ‘lEP_u2wBsrL_vQjNIMFf‘, ‘_score‘: 0.2876821, ‘_source‘: {‘name‘: ‘熊大‘}}, {‘_index‘: ‘p2‘, ‘_type‘: ‘doc‘, ‘_id‘: ‘W0MjvGwBsrL_vQjNNd0x‘, ‘_score‘: 0.2876821, ‘_source‘: {‘sex‘: ‘男‘, ‘name‘: ‘熊大‘, ‘desc‘: ‘卡通智障儿童‘}}]}}
  • es.get_source,通过索引、类型和ID获取文档的来源,其实,直接返回想要的字典。
1 print(es.get_source(index=‘p2‘, doc_type=‘doc‘, id=‘1‘))
  • es.count,执行查询并获取该查询的匹配数。比如查询年龄是18的文档。
 1 body = {
 2     "query": {
 3         "match": {
 4             "age": 18
 5         }
 6     }
 7 }
 8 # print(es.count(index=‘p2‘, doc_type=‘doc‘, body=body))
 9 # print(es.count(index=‘p2‘, doc_type=‘doc‘, body=body)[‘count‘])
10 print(es.count(index=‘p2‘)) # 查在p2索引中总的文档个数{‘count‘: 4, ‘_shards‘: {‘total‘: 5, ‘successful‘: 5, ‘skipped‘: 0, ‘failed‘: 0}}
11 print(es.count(index=‘p2‘, doc_type=‘doc‘)) # {‘count‘: 4, ‘_shards‘: {‘total‘: 5, ‘successful‘: 5, ‘skipped‘: 0, ‘failed‘: 0}}
  • es.create,创建索引(索引不存在的话)并新增一条数据,索引存在仅新增(只能新增,重复执行会报错),还是觉得index好用些
1 # print(es.create(index=‘p2‘, doc_type=‘doc‘, id=3, body={"city": "成都", "desc": "旅游的地方颇多, 小吃出名"}))
2 print(es.get_source(index=‘p2‘, doc_type=‘doc‘, id=3)) 
  • es.delete,删除指定的文档。比如删除文章id为4的文档,但不能删除仅只删除索引,如果想要删除索引,还需要es.indices.delete来处理
  • es.delete_by_query,删除与查询匹配的所有文档。
1 # print(es.delete(index=‘p2‘, doc_type=‘doc‘, id=1))
2 # print(es.delete_by_query(index=‘p2‘, body={"query": {"match": {"age": 20}}}))
3 # print(es.search(index=‘p2‘))
  • es.exists,查询elasticsearch中是否存在指定的文档,返回一个布尔值。
1 print(es.exists(index=‘p2‘, doc_type=‘doc‘, id=‘1‘))
  • es.info,获取当前集群的基本信息。
1 print(es.info())
  • es.ping,如果集群已启动,则返回True,否则返回False。
1 print(es.ping())

Indices(es.indices 索引相关)  

 创建索引

 1 body = {
 2     "mappings": {
 3         "doc": {
 4             "dynamic": "strict",
 5             "properties": {
 6                 "title": {
 7                     "type": "text",
 8                     "analyzer": "ik_max_word"
 9                 },
10                 "url": {
11                     "type": "text"
12                 },
13                 "action_type": {
14                     "type": "text"
15                 },
16                 "content": {
17                     "type": "text"
18                 }
19             }
20         }
21     }
22 }
23
24 print(es.indices.create(index=‘p3‘, body=body))

创建结果

1 {‘acknowledged‘: True, ‘shards_acknowledged‘: True, ‘index‘: ‘p3‘}
  • es.indices.analyze,返回分词结果。
1 print(es.indices.analyze(body={‘analyzer‘: ‘ik_max_word‘, ‘text‘: "皮特和茱丽当选“年度模范情侣”Brad Pitt and Angelina Jolie"}))
  • es.indices.delete,在Elasticsearch中删除索引。
1 print(es.indices.delete(index=‘p3‘))
2 print(es.indices.delete(index=‘p2‘))    # {‘acknowledged‘: True}
  • es.indices.put_alias,为一个或多个索引创建别名,查询多个索引的时候,可以使用这个别名。
1 print(es.indices.put_alias(index=‘p3‘, name=‘p3_alias‘))  # 为单个索引创建别名
2 print(es.indices.put_alias(index=[‘p3‘, ‘p2‘], name=‘p23_alias‘))  # 为多个索引创建同一个别名,联查用
  • es.indices.delete_alias,删除一个或多个别名。
1 print(es.indices.delete_alias(index=‘p1‘))
2 print(es.indices.delete_alias(index=[‘p1, p2‘])) 
  • es.indices.get_mapping,检索索引或索引/类型的映射定义。
1 print(es.indices.get_mapping(index=‘p3‘))
  • es.indices.get_settings,检索一个或多个(或所有)索引的设置。
1 print(es.indices.get_settings(index=‘p3‘))
  • es.indices.get,允许检索有关一个或多个索引的信息。
1 print(es.indices.get(index=‘p2‘))    # 查询指定索引是否存在
2 print(es.indices.get(index=[‘p2‘, ‘p3‘]))
  • es.indices.get_alias,检索一个或多个别名。
1 print(es.indices.get_alias(index=‘p2‘))
2 print(es.indices.get_alias(index=[‘p2‘, ‘p3‘]))
  • es.indices.get_field_mapping,检索特定字段的映射信息。
1 print(es.indices.get_field_mapping(fields=‘url‘, index=‘p3‘, doc_type=‘doc‘))
2 print(es.indices.get_field_mapping(fields=[‘url‘, ‘title‘], index=‘p3‘, doc_type=‘doc‘))
  • es.indices.delete_alias,删除特定别名。
  • es.indices.exists,返回一个布尔值,指示给定的索引是否存在。
  • es.indices.exists_type,检查索引/索引中是否存在类型/类型。
  • es.indices.flus,明确的刷新一个或多个索引。
  • es.indices.get_field_mapping,检索特定字段的映射。
  • es.indices.get_template,按名称检索索引模板。
  • es.indices.open,打开一个封闭的索引以使其可用于搜索。
  • es.indices.close,关闭索引以从群集中删除它的开销。封闭索引被阻止进行读/写操作。
  • es.indices.clear_cache,清除与一个或多个索引关联的所有缓存或特定缓存。
  • es.indices.put_alias,为特定索引/索引创建别名。
  • es.indices.get_uprade,监控一个或多个索引的升级程度。
  • es.indices.put_mapping,注册特定类型的特定映射定义。
  • es.indices.put_settings,实时更改特定索引级别设置。
  • es.indices.put_template,创建一个索引模板,该模板将自动应用于创建的新索引。
  • es.indices.rollove,当现有索引被认为太大或太旧时,翻转索引API将别名转移到新索引。API接受单个别名和条件列表。别名必须仅指向单个索引。如果索引满足指定条件,则创建新索引并切换别名以指向新别名。
  • es.indices.segments,提供构建Lucene索引(分片级别)的低级别段信息。

Cluster(集群相关)

  • es.cluster.get_settigns,获取集群设置。
1 print(es.cluster.get_settings())
  • es.cluster.health,获取有关群集运行状况的非常简单的状态。
1 print(es.cluster.health()) 
  • es.cluster.state,获取整个集群的综合状态信息。
1 print(es.cluster.state())
  • es.cluster.state,获取整个集群的综合状态信息。
1 print(es.cluster.stats()) 

Node(节点相关)

  • es.nodes.info,返回集群中节点的信息。
1 print(es.nodes.info())  # 返回所节点
2 print(es.nodes.info(node_id=‘node1‘))   # 指定一个节点
3 print(es.nodes.info(node_id=[‘node1‘, ‘node2‘]))   # 指定多个节点列表
  • es.nodes.stats,获取集群中节点统计信息。
1 print(es.nodes.stats())
2 print(es.nodes.stats(node_id=‘node1‘))
3 print(es.nodes.stats(node_id=[‘node1‘, ‘node2‘]))
  • es.nodes.hot_threads,获取指定节点的线程信息。
1 print(es.nodes.hot_threads(node_id=‘node1‘))
2 print(es.nodes.hot_threads(node_id=[‘node1‘, ‘node2‘]))
  • es.nodes.usage,获取集群中节点的功能使用信息。
1 print(es.nodes.usage())
2 print(es.nodes.usage(node_id=‘node1‘))
3 print(es.nodes.usage(node_id=[‘node1‘, ‘node2‘]))

Cat(一种查询方式)

  • es.cat.aliases,返回别名信息。
1 print(es.cat.aliases(name=‘p23_alias‘))
2 print(es.cat.aliases(name=‘p23_alias‘, format=‘json‘)) 
  • es.cat.allocation,返回分片使用情况。
1 print(es.cat.allocation())
2 print(es.cat.allocation(node_id=[‘node1‘]))
3 print(es.cat.allocation(node_id=[‘node1‘, ‘node2‘], format=‘json‘))
  • es.cat.count,Count提供对整个群集或单个索引的文档计数的快速访问。
1 print(es.cat.count())  # 集群内的文档总数
2 print(es.cat.count(index=‘p3‘))  # 指定索引文档总数
3 print(es.cat.count(index=[‘p3‘, ‘p2‘], format=‘json‘))  # 返回两个索引文档和
  • es.cat.fielddata,基于每个节点显示有关当前加载的fielddata的信息。有些数据为了查询效率,会放在内存中,fielddata用来控制哪些数据应该被放在内存中,而这个es.cat.fielddata则查询现在哪些数据在内存中,数据大小等信息。
1 print(es.cat.fielddata())
2 print(es.cat.fielddata(format=‘json‘, bytes=‘b‘))
1 bytes 单位‘b‘,‘k‘,‘kb‘,‘m‘,‘mb‘,‘g‘,‘gb‘,‘t‘,‘tb‘ ,‘p‘,‘pb‘
  • es.cat.health,从集群中health里面过滤出简洁的集群健康信息
1 print(es.cat.health())
2 print(es.cat.health(format=‘json‘))
  • es.cat.help,返回es.cat的帮助信息。
1 print(es.cat.help())
  • es.cat.indices,返回索引的信息。
1 print(es.cat.indices())
2 print(es.cat.indices(index=‘p3‘))
3 print(es.cat.indices(index=‘p3‘, format=‘json‘))
  • es.cat.master,返回集群中主节点的IP,绑定IP和节点名称。
1 print(es.cat.master())
2 print(es.cat.master(format=‘json‘))
  • es.cat.nodeattrs,返回节点的自定义属性。
1 print(es.cat.nodeattrs())
2 print(es.cat.nodeattrs(format=‘json‘))
  • es.cat.nodes,返回节点的拓扑,这些信息在查看整个集群时通常很有用,特别是大型集群。我有多少符合条件的节点?
1 print(es.cat.nodes())
2 print(es.cat.nodes(format=‘json‘))
  • es.cat.plugins,返回节点的插件信息。
1 print(es.cat.plugins())
2 print(es.cat.plugins(format=‘json‘))
  • es.cat.segments,返回每个索引的Lucene有关的信息。
1 print(es.cat.segments())
2 print(es.cat.segments(index=‘p3‘))
3 print(es.cat.segments(index=‘p3‘, format=‘json‘))
  • es.cat.shards,返回哪个节点包含哪些分片的信息。
1 print(es.cat.shards())
2 print(es.cat.shards(index=‘p3‘))
3 print(es.cat.shards(index=‘p3‘, format=‘json‘))
  • es.cat.thread_pool,获取有关线程池的信息。
1 print(es.cat.thread_pool())

Snapshot(快照相关)

  • es.snapshot.create,在存储库中创建快照。

    • repository存储库名称。
    • snapshot快照名称。
    • body快照定义。
  • es.snapshot.delete,从存储库中删除快照。
  • es.snapshot.create_repository。注册共享文件系统存储库。
  • es.snapshot.delete_repository,删除共享文件系统存储库。
  • es.snapshot.get,检索有关快照的信息。
  • es.snapshot.get_repository,返回有关已注册存储库的信息。
  • es.snapshot.restore,恢复快照。
  • es.snapshot.status,返回有关所有当前运行快照的信息。通过指定存储库名称,可以将结果限制为特定存储库。
  • es.snapshot.verify_repository,返回成功验证存储库的节点列表,如果验证过程失败,则返回错误消息。

Task(任务相关)

  • es.tasks.get,检索特定任务的信息。
  • es.tasks.cancel,取消任务。
  • es.tasks.list,任务列表。

更多玩法https://elasticsearch-py.readthedocs.io/en/master/api.html

原文地址:https://www.cnblogs.com/Alexephor/p/11398060.html

时间: 2024-10-17 11:28:52

Python操作es的相关文章

Python操作es批量读取数据

1. Python连接elasticserach python连接elasticsearch有一下几种连接方式 pip3 instal elasticsearch from elasticsearch import Elasticsearch es = Elasticsearch() # 默认连接本地elasticsearch es = Elasticsearch(["127.0.0.1:9200"]) # 连接本地9200端口 es = Elasticsearch(["19

使用python操作elasticsearch实现数据插入分析

前言: 例行公事,有些人可能不太了解elasticsearch,下面搜了一段,大家瞅一眼. Elasticsearch是一款分布式搜索引擎,支持在大数据环境中进行实时数据分析.它基于Apache Lucene文本搜索引擎,内部功能通过ReST API暴露给外部.除了通过HTTP直接访问Elasticsearch,还可以通过支持Java.JavaScript.Python及更多语言的客户端库来访问.它也支持集成Apache Hadoop环境.Elasticsearch在有些处理海量数据的公司中已经

Python操作数据库(mysql redis)

一.python操作mysql数据库: 数据库信息:(例如211.149.218.16   szz  123456) 操作mysql用pymysql模块 #操作其他数据库,就安装相应的模块 import  pymysql ip='211.149.218.16' port=3306 passwd='123456' user='root' db='szz' conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,cha

python操作mysql ------- SqlAchemy正传

本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 pip3 install pymysql 使用操作 1.执行SQL #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysql.connect(host='127.0.0.1

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

python操作mysql数据库

连接数据库 输入值 存入数据库 关闭 import string import mysql.connector conn=mysql.connector.connect(user='root',password='test',database='dalian',use_unicode=True) cursor=conn.cursor() a=raw_input('enter an id: ') b=raw_input('enter a name: ') while(a!='quit' or b!

使用python操作InfluxDB

环境: CentOS6.5_x64InfluxDB版本:1.1.0Python版本 : 2.6 准备工作 启动服务器 执行如下命令: service influxdb start 示例如下: [[email protected] ~]# service influxdb start Starting influxdb... influxdb process was started [ OK ] [[email protected] ~]# 安装influxdb-python github地址: 

python操作MySQL

本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 ? 1 pip3 install pymysql 使用操作 1.执行SQL + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/usr/bin/env python # -*-

python 全栈 数据库 (三) python操作数据库

python 操作MYSQL数据库主要有两种方式: 使用原生模块:pymysql ORM框架:SQLAchemy 一.pymysql 1.1下载安装模块 第一种:cmd下:执行命令下载安装:pip3 install pymysql 第二种:IDE下pycharm python环境路径下添加模块 1.2使用操作 #导入模块 import pymysql #建立连接通道,建立连接填入(连接数据库的IP地址,端口号,用户名,密码,要操作的数据库,字符编码) conn = pymysql.connect