2015-11-20 46 views
4

我有一個運行許多ElasticSearch聚合Python腳本,例如:Python Elasticsearch:如何在查詢中包含`search_type = count`?

client = Elasticsearch(...) 
q = {"aggs": {"my_name":{"terms": "field", "fieldname"}}} 
res = client.search(index = "indexname*", doc_type = "doc_type", body = q) 

但這返回搜索查詢(符合一切我認爲)res["hits"]和聚合結果res["aggregations"]

我要運行是Python相當於以下

GET /index*/doc_type/_search?search_type=count 

{"aggs": {"my_name":{"terms": "field", "fieldname"}}} 

的如何確保包括?search_type=count使用Python Elasticsearch什麼時候?

我想知道一般情況,但是我正在研究這個問題的當前原因是偶爾會在運行查詢時遇到由超時或數據大小引起的錯誤。我的懷疑是,如果我只能要求計數,那麼我會避免這些。

回答

9

普遍的共識是不使用search_type=count了,因爲它是been deprecated in 2.0。相反,你應該簡單地使用size: 0

res = client.search(index = "indexname*", doc_type = "doc_type", body = q, size=0) 
                      ^
                      | 
                     add this 
+0

這工作!我不太瞭解你鏈接到的文檔。有沒有'query_then_fetch'例子? – travelingbones

+1

'query_then_fetch'是默認的搜索類型,即不需要指定它。我分享的鏈接只是ES 2.0中的重大更改列表,這意味着只要升級到2.0,建議使用'size:0'而不是 – Val

+0

Ran在文檔中爲此,我認爲我會提供鏈接:https://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-request-from-size.html – travelingbones

1

Here是搜索文檔

試試這個

res = client.search(index = "indexname*", doc_type = "doc_type", body = q, search_type='count') 

看@val的答案,如果你正在使用ES 2.x

+0

這也工作! – travelingbones

+1

當然,只要確保在該行的上方添加一個大TODO,即可在升級到2.0時使用'size'。 – Val

+1

謝謝@Val,我真的需要看看2.0的變化 – ChintanShah25

相關問題