一、安裝與環境配置
安裝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/zh-tw/n/157676.html
微信掃一掃
支付寶掃一掃