一、安装与环境配置
安装ElasticsearchPyhon库非常简单,我们只需要使用pip命令,即可完成安装:
pip install elasticsearch
注意,此时我们需要建立与Elasticsearch的连接,因此我们需要确保Elasticsearch本身已经被正确地安装并启动。如果你还没有安装,可以在官网http://elastic.co/downloads查看具体安装步骤并完成安装。
为了正确地连接Elasticsearch,请先在Python代码中初始化Elasticsearch对象,代码如下:
from elasticsearch import Elasticsearch es = Elasticsearch(['localhost'], port=9200)
这里我们默认连接localhost主机的9200端口,如果你的Elasticsearch部署在其他主机或使用其他端口,请在Elasticsearch()方法中相应地修改参数。
二、数据索引与查询
1、创建索引
在Elasticsearch中,数据的基本单位是文档(document),Elasticsearch将文档存储在一个索引(index)中。因此,我们首先需要创建一个索引。
es.indices.create(index='my_index', ignore=400)
我们使用indices.create()方法,将一个名为my_index的索引创建起来。如果索引已经存在,则该方法会返回一个HTTP 400异常,我们在这里忽略该异常。如果你需要更多地了解异常处理,可以参考Elasticsearch官方文档。
2、增、删、改、查
我们使用Elasticsearch来搜寻数据,主要有两个步骤:首先需要在索引中存储数据(增/改),其次可以在索引中查找数据(查)。
增
我们使用Elasticsearch的index()方法来索引一个文档,方法定义如下:
def index(self, index, body, doc_type=None, id=None, params=None, refresh=None, routing=None, timeout=None, version=None, version_type=None, **kwargs):
pass
其中,index表示索引名称,doc_type表示文档类型(如果你不指定,Elasticsearch会默认使用_doc类型),body表示文档内容,id为文档ID(如果你不指定,Elasticsearch会自动生成一个),其他参数具体含义可以参考Elasticsearch官方文档。
下面是一个简单的例子,我们索引了一个名为person的文档:
doc = {
'name': '张三',
'age': 18,
'address': '北京市朝阳区'
}
es.index(index='my_index', doc_type='person', body=doc, id=1)
删
我们使用Elasticsearch的delete()方法来删除一个文档,方法定义如下:
def delete(self, index, doc_type, id, params=None, headers=None):
pass
其中,index、doc_type、id表示要删除的文档的索引、类型和ID。其他参数具体含义可以参考Elasticsearch官方文档。
下面是一个简单的例子,我们删除了刚才索引的文档(person类型中ID为1的文档):
es.delete(index='my_index', doc_type='person', id=1)
改
我们使用Elasticsearch的update()方法来更新一个文档,方法定义如下:
def update(self, index, doc_type, id, body=None, params=None, headers=None):
pass
其中,index、doc_type、id表示要更新的文档的索引、类型和ID,body表示更新后的内容,其他参数具体含义可以参考Elasticsearch官方文档。
下面是一个简单的例子,我们更新了刚才删除的文档(person类型中ID为1的文档):
doc = {
'name': '李四',
'age': 20,
'address': '上海市徐汇区'
}
es.update(index='my_index', doc_type='person', id=1, body={'doc': doc})
查
我们使用Elasticsearch的search()方法来在索引中查找数据,方法定义如下:
def search(self, index=None, doc_type=None, body=None, params=None, headers=None, preference=None):
pass
其中,index、doc_type表示要搜索的索引和类型,body表示搜索请求的内容,其他参数具体含义可以参考Elasticsearch官方文档。
下面是一个简单的例子,我们搜索了所有文档:
es.search(index='my_index', body={'query': {'match_all': {}}})
三、数据聚合与分析
1、聚合
Elasticsearch提供了非常强大的文档聚合能力,聚合可以对文档进行分组、计算、筛选等操作,并返回聚合结果。例如,我们要对人员文档进行年龄分布聚合,具体代码如下:
body = {
"size": 0,
"aggs": {
"age_distribution": {
"terms": {
"field": "age",
"size": 100
}
}
}
}
es.search(index='my_index', body=body)
上面的代码使用Elasticsearch的Aggregations API,对年龄进行聚合,并返回聚合结果。其中,”size”:0表示不需要搜索任何文档;”field”:”age”表示根据年龄字段进行聚合;”size”:100表示返回前100条聚合结果。
2、分析
Elasticsearch提供了非常丰富的分析能力,使用分析模块可以对文档进行分词、过滤、排序、分页等操作,以优化搜索效率。例如,我们要对人员文档进行分页查询,具体代码如下:
body = {
"from": 0,
"size": 10,
"query": {
"match_all": {}
}
}
es.search(index='my_index', body=body)
上面的代码使用Elasticsearch的Search API,对人员文档进行了分页查询。其中,”from”:0表示从第0条数据开始查询;”size”:10表示每次查询10条数据;”match_all”:{}表示查询所有文档。
四、性能优化与调优
1、批量操作
Elasticsearch提供了Batch API,可以在一次HTTP请求中完成多个操作,以提高操作效率。例如,我们要批量索引1000条人员文档,具体代码如下:
actions = []
for i in range(1000):
doc = {
'name': '张三%d' % i,
'age': i,
'address': '北京市朝阳区'
}
action = {
'_index': 'my_index',
'_type': 'person',
'_id': i + 1,
'_source': doc
}
actions.append(action)
es.bulk(actions)
上面的代码使用bulk()方法,一次性索引了1000条人员文档。其中,actions为一个列表,每个元素为一个操作;’_index’、’_type’、’_id’表示索引名、类型、ID;’_source’表示文档内容。
2、复合查询
为了提高搜索效率,我们可以使用Elasticsearch的复合查询,将多个查询操作合并为一次优化后的查询。例如,我们要搜索30岁以下的人员文档,具体代码如下:
body = {
"query": {
"bool": {
"must": [
{ "match_all": {} }
],
"filter": [
{ "range": { "age": { "lt": 30 } } }
]
}
}
}
es.search(index='my_index', body=body)
上面的代码使用bool查询,将must和filter子句合并为一次查询。其中,must表示必须满足的条件,filter表示非关键条件。因为filter不需要打分,所以比must子句更快,可以提高检索效率。
3、分片与副本
Elasticsearch将索引分为多个分片(shard),每个分片可以独立存储、查询数据,提高了系统的性能和容错能力。此外,Elasticsearch还支持在多个节点上复制分片(副本),提高了搜索效率和数据可用性。我们可以在操作时指定索引的分片数和副本数,以自由控制系统性能和容错机制。
es.indices.create(index='my_index', body={
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
}
})
上面的代码在创建索引时,指定了分片数和副本数。
结论
本文主要介绍了ElasticsearchPyhon的使用方法,包括数据索引与查询、数据聚合与分析、性能优化与调优等方面。通过本文的介绍,读者应该可以了解到ElasticsearchPyhon的基本用法,并能够开始使用ElasticsearchPyhon进行实际操作。如果你需要更深入地了解Elasticsearch,可以参考Elasticsearch官方文档。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/157676.html
微信扫一扫
支付宝扫一扫