python下使用elasticsearch
来源:互联网 发布:网络怎么可以赚钱 编辑:程序博客网 时间:2024/06/05 04:10
1、简介
ElasticSearch(简称ES)是一个分布式、Restful的搜索及分析服务器,设计用于分布式计算;能够达到实时搜索,稳定,可靠,快速。和Apache Solr一样,它也是基于Lucence的索引服务器,而ElasticSearch对比Solr的优点在于:
轻量级:安装启动方便,下载文件之后一条命令就可以启动。
Schema free:可以向服务器提交任意结构的JSON对象,Solr中使用schema.xml指定了索引结构。
多索引文件支持:使用不同的index参数就能创建另一个索引文件,Solr中需要另行配置。
分布式:Solr Cloud的配置比较复杂。
2013年初,GitHub抛弃了Solr,采取ElasticSearch 来做PB级的搜索。
近年ElasticSearch发展迅猛,已经超越了其最初的纯搜索引擎的角色,现在已经增加了数据聚合分析(aggregation)和可视化的特性,如果你有数百万的文档需要通过关键词进行定位时,ElasticSearch肯定是最佳选择。当然,如果你的文档是JSON的,你也可以把ElasticSearch当作一种“NoSQL数据库”, 应用ElasticSearch数据聚合分析(aggregation)的特性,针对数据进行多维度的分析。
ElasticSearch一些国内外的优秀案例:
Github:“GitHub使用ElasticSearch搜索20TB的数据,包括13亿文件和1300亿行代码”。
SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”。
百度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据。
Cluster和Node
ES可以以单点或者集群方式运行,以一个整体对外提供search服务的所有节点组成cluster,组成这个cluster的各个节点叫做node。
Index
这是ES存储数据的地方,类似于关系数据库的database。
Shards
索引分片,这是ES提供分布式搜索的基础,其含义为将一个完整的index分成若干部分存储在相同或不同的节点上,这些组成index的部分就叫做shard。
Replicas
索引副本,ES可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高ES的查询效率,ES会自动对搜索请求进行负载均衡。
Recovery
代表数据恢复或叫数据重新分布,ES在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
Gateway
ES索引快照的存储方式,ES默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个ES集群关闭再重新启动时就会从gateway中读取索引备份数据。
Discovery.zen
代表ES的自动发现节点机制,ES是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
Transport
代表ES内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)。
3、python中的简单使用
#coding=utf8from datetime import datetimefrom elasticsearch import Elasticsearch#创建索引 调用create或index方法es = Elasticsearch()es.create(index="test-index2",doc_type="test-type",id=1, body={"any":"data","timesamp":datetime.now()}) #已存在的不可重新创建es.create(index="test",doc_type="test-type",id=1,body={"any":"data","timesamp":datetime.now()}) #已存在的不可重新创建es.indices.delete(index="test-index2",ignore=[400,404]) #删除索引
from elasticsearch import Elasticsearch# 查询索引中的所有内容es = Elasticsearch([{'host':'127.0.0.1','port':9200}])index = "test"query = {"query":{"match_all":{}}}resp = es.search(index, body=query)resp_docs = resp["hits"]["hits"]total = resp['hits']['total']print(total) #总共查找到的数量print(resp_docs[0]['_source']['@timestamp']) #输出一个字段
# 用scroll分次查询所有内容+复杂条件es = Elasticsearch([{'host':'127.0.0.1','port':9200}])index = "test"query = { "query": { "match":{"date":"2017-12-22"} } }resp = es.search(index, body=query, scroll="1m",size=100)scroll_id = resp['_scroll_id']resp_docs = resp["hits"]["hits"]total = resp['hits']['total']count = len(resp_docs)datas = resp_docswhile len(resp_docs) > 0: scroll_id = resp['_scroll_id'] resp = es.scroll(scroll_id=scroll_id, scroll="1m") resp_docs = resp["hits"]["hits"] datas.extend(resp_docs) count += len(resp_docs) if count >= total: breakprint (len(datas))
# 聚合# 查看一共有多少种@timestamp字段es = Elasticsearch([{'host':'127.0.0.1','port':9200}])index = "test"query = {"aggs":{"all_times":{"terms":{"field":"@timestamp"}}}}resp = es.search(index, body=query)total = resp['hits']['total']print (total)print (resp["aggregations"])
- python下使用elasticsearch
- Python-ElasticSearch的使用
- Windows下Elasticsearch环境搭建并结合Python简单使用
- Laravel下Elasticsearch使用
- elasticsearch的python接口使用
- windows下elasticSearch以及elasticSearch-php安装及使用
- 使用Python往Elasticsearch插入数据
- ES索引重建--使用python elasticsearch
- python中使用elasticsearch做为搜索引擎
- 使用Python往Elasticsearch插入数…
- elasticsearch搭建及python简单使用
- windows下使用ElasticSearch数据库-入门
- windows下使用curl操纵ElasticSearch
- elasticsearch使用
- ElasticSearch使用
- Elasticsearch使用
- ElasticSearch使用
- 使用python,批量导入数据到elasticsearch中
- 哈希表-JAVA
- 【阿里云MVP月度分享】如何基于MYSQL做实时计算?
- Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新
- 高级结构设计
- 通过xml配置来实现数据库的批量修改一
- python下使用elasticsearch
- 人月神话笔记-焦油坑、人月神话
- oracle初次接触
- iOS开发之多种Cell高度自适应实现方案的UI流畅度分析
- class 理解意思
- 输出每种兑换方法中,1分的硬币数、2分的硬币数和5分的硬币数
- SQL UNIQUE
- TabbedActivity
- mycat