1. 程式人生 > >python 呼叫elasticsearch的幾種不同方式

python 呼叫elasticsearch的幾種不同方式

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search,Q,scan
es = Elasticsearch()

1、仿照kibana中的寫法
q = {"query": {"match": {"name": "easy"}}}
res = es.Search(body=q)
#這中方式返回的結果和kibana查詢結果一致,為json

2、通過elasticsearch_dsl的Search方法
s = Search().using(es).query('match',name='easy') 
res = s.execute()  
# MultiMatch(query='python django', fields=['title', 'body'])
# Match(title={"query": "web framework", "type": "phrase"}) 3、通過Q方式寫查詢語句(避免了字典的多重巢狀) q = Q("match",name='easy') s = Search().using(es).query(q) res = s.execute(ignore_cache=True) #ignore_cache=True 清除快取資料,不然即使改變了查詢語句執行出的為之前的結果 可通過s.to_dict()驗證語句 可通過s.query = Q("match",name='haha') 重建查詢語句 #通過dsl的查詢得到的結果有自己的呼叫方法 res.hits[0].id
4、通過scan的方式 q = {"query": {"match": {"name": "easy"}}} res = scan(es,size=100,preserve_order=True,query=q) #本機上實驗size引數無作用,總是返回所有結果,preserve_order=True設定為flase或不設定會報錯,希望解答 doc = [i for i in res] #即可得到所有返回結果