一、環境要求
根據es服務器版本,下載es的python api包,我們這里的環境為:
python3.8,
下載的elastic search版本為7.6.0,安裝方式:
pip install elasticsearch==7.6.0
二、es操作及python代碼
1、獲取es實例,連接到es
如果沒有額外的安全驗證,需要指定的內容包括:集群ip地址(list類型),端口號(每個節點的端口號可能不同,這里是字符串,代表所有節點的端口號是一樣的),用戶名,密碼。
class ElasticSearchHandler():def __init__(self, host: list, port: str, username: str, password: str):self.port = portself.host = hostself.username = usernameself.password = passwordself.es = self.create()# 新建es實例,并返回def create(self) -> Elasticsearch:context = ssl._create_unverified_context()addrs = []for host in self.host:addr = {'host': host, 'port': self.port}addrs.append(addr)if self.username and self.password:elasticsearch = Elasticsearch(addrs, http_auth=(self.username, self.password), scheme="https", ssl_context=context)else:elasticsearch = Elasticsearch(addrs)return elasticsearch
2、es服務器的增刪改查操作
1)創建一個index
# 創建一個index,并定義index的mapping和結構def create_index(self, index_name, body):response = self.es.indices.create(index=index_name, body=body)print(response)
在devtool創建:
PUT /index1
{"mappings": {"properties": {"field1": {"type": "text"},"field2": {"type": "text"}}}
}
2)刪除指定index
def delete_index(self, index_name):res = self.es.indices.delete(index=index_name)print.info(res)
在devtool中刪除
DELETE /my_index
3)獲取指定index的數據
def get_all_data(self, index_name):query_body = {"query": {"match_all": {}}}response = self.es.search(index=index_name, body=query_body)return response
dev tool中執行
GET /myindex/_search
{"query": {"match_all": {}}
}
4)數據寫入,以bulk的方式
# 以bulk的方式寫入數據, 可以多條也可以一條def bulk_insert(self, index_name, bulk_data):response = self.es.bulk(index=index_name, body=bulk_data)print("Bulk operation response:", response)# 寫入數據的格式為# 子問題可能是多個,存儲的是列表index_name = 'my_index'bulk_data = [{"index": {"_index": index_name}},{"field1": "value1", "field2": "value2", "field3": "value3"}]es_handler.bulk_insert(index_name=index_name, bulk_data=bulk_data)
在dev tool當中寫入的話,格式為,下面的語句寫入了兩條記錄:
POST vector_qt_greeting/_bulk
{ "index": {"_index": "my_index"}}
{"field1": "value1", "field2": "value2"}
{ "index": {"_index": "my_index"}}
{"field1": "value3", "field2": "value4"}
三、條件查詢
def query_most_n_relate_index(self, index_name, query_field, query_content, size=1):body = {"size": size,"from": 0,"query": {"match": {# "查詢字段": "查詢內容"query_field: query_content}}}result = self.es.search(index=index_name, body=body)return result
使用dev tool查詢
GET /my_index/_search
{"size": 2,"from": 0,"query": {"bool":{"should":[{"match": {"field1": {"query": "value1"}}}]}}}
es的查詢方式很靈活,可以單獨寫一篇文章, 就先不列在這里面了,它可以模糊查詢,可以計算文檔距離,也可以精確查詢,可以說非常豐富靈活。
附:dev tool是什么?如何使用?
在Elasticsearch的Dev Tools(Kibana Dev Tools)中刪除索引是一個簡單的過程。Kibana Dev Tools提供了一個用戶友好的界面,允許你直接與Elasticsearch集群交互,執行各種操作,包括刪除索引。
以下是使用Kibana Dev Tools刪除指定索引的步驟:
-
打開Kibana:
在你的Web瀏覽器中打開Kibana的Web界面。通常,Kibana運行在http://localhost:5601
(如果你使用的是默認端口)。 -
進入Dev Tools:
在Kibana的左側菜單中找到“Dev Tools”(開發者工具)并點擊進入。 -
選擇索引:
在Dev Tools界面的頂部,確保你已經選擇了包含你想要刪除的索引的Kibana空間或Elasticsearch索引模式。 -
編寫Delete Index請求:
在Dev Tools的右側窗格中,編寫一個HTTP DELETE請求來刪除索引。例如,如果你要刪除名為my_index
的索引,請求應該如下所示:DELETE /my_index
只需將
my_index
替換為你想要刪除的實際索引名稱。 -
執行請求:
編寫完請求后,點擊“Execute”(執行)按鈕,Dev Tools將向Elasticsearch發送請求并刪除指定的索引。 -
檢查結果:
執行完請求后,Dev Tools會顯示響應結果。如果索引刪除成功,響應體將包含一個確認信息。
如果你的Elasticsearch集群啟用了安全性功能,你可能需要確保你的Kibana實例已經使用具有足夠權限的用戶進行了認證,以便能夠執行刪除索引的操作。