Python中整合es兩種方式
阿新 • • 發佈:2021-06-15
1、原生整合
# https://github.com/elastic/elasticsearch-py # https://github.com/elastic/elasticsearch-dsl-py # Official low-level client for Elasticsearch ### 等同於pymysql pip3 install elasticsearch pip3 install elasticsearch-dsl from elasticsearch import Elasticsearch obj = Elasticsearch() # 得到一個物件 # 建立索引(Index)# result = obj.indices.create(index='user', body={"userid":'1','username':'lqz'},ignore=400) # print(result) # 刪除索引 # result = obj.indices.delete(index='user', ignore=[400, 404]) # 插入資料 # data = {'userid': '1', 'username': 'lqz','password':'123'} # result = obj.create(index='news', doc_type='_doc', id=1, body=data)# print(result) # 更新資料 ''' 不用doc包裹會報錯 ActionRequestValidationException[Validation Failed: 1: script or doc is missing ''' # data ={'doc':{'userid': '1', 'username': 'lqz','password':'123ee','test':'test'}} # result = obj.update(index='news', doc_type='_doc', body=data, id=1) # print(result) # 刪除資料# result = obj.delete(index='news', doc_type='_doc', id=1) # print(result) # 查詢 # 查詢所有文件 # query = {'query': {'match_all': {}}} # 查詢名字叫做jack的所有文件 query = {'query': {'match': {'title': '十個'}}} # 查詢年齡大於11的所有文件 # query = {'query': {'range': {'age': {'gt': 11}}}} allDoc = obj.search(index='books', doc_type='_doc', body=query) # print(allDoc) print(allDoc['hits']['hits'][0]['_source'])
2、dsl整合
# Elasticsearch DSL is a high-level # pip3 install elasticsearch-dsl from datetime import datetime from elasticsearch_dsl import Document, Date, Nested, Boolean,analyzer, InnerDoc, Completion, Keyword, Text,Integer from elasticsearch_dsl.connections import connections connections.create_connection(hosts=["localhost"]) class Article(Document): title = Text(analyzer='ik_max_word') author = Text() class Index: name = 'myindex' def save(self, ** kwargs): return super(Article, self).save(** kwargs) if __name__ == '__main__': # Article.init() # 建立索引 # 儲存資料 # article = Article() # article.title = "測試測試阿斯頓傳送到發斯蒂芬啊啊士大夫阿斯蒂芬" # article.author = "lqz" # article.save() # 資料就儲存了 #查詢資料 # s=Article.search() # s = s.filter('match', title="測試") # # results = s.execute() # 執行 # print(results[0].title) #刪除資料 s = Article.search() s = s.filter('match', title="李清照").delete() #修改資料 # s = Article().search() # s = s.filter('match', title="測試") # results = s.execute() # print(results[0]) # results[0].title="李清照阿斯頓傳送到傳送阿斯蒂" # results[0].save()