python 呼叫elasticsearch的幾種不同方式
阿新 • • 發佈:2019-01-10
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] #即可得到所有返回結果