2017-06-16 101 views
-1

我有一個python腳本,應該在彈性搜索中存儲我的JSON文件中打印所有ID的人員。但我只得到十個結果(截斷),因爲我知道默認只顯示10個結果。Elasticsearch結果限制問題

from elasticsearch import Elasticsearch 
import sys 
es = Elasticsearch() 
res = es.search(index="my_docs", body={"query": {"match_all": {}}}) 
print("%d documents found" % res['hits']['total']) 
for doc in res['hits']['hits']: 
     print (" Doc ID: %s" % (doc['_id'])) 

它說5000找到的文件,但返回10 ID的唯一。

從Elasticsearch的集合中獲取所有文檔的文檔ID的方法是什麼?

+0

您的問題的標題是誤導。當然,這不是打印錯誤,而是數據檢索錯誤。 – DyZ

回答

1

你需要告訴ES返回十餘結果(這是默認):

body={"query": {"match_all": {}}, 'results': 1000} 

對於非常大量的結果,你需要得到尋呼方式的所有結果; ES提供了這樣做的手段。

+0

謝謝!假設我想打印所有的ID,我可以使用'results'這樣的東西:'all'嗎? –

+0

你可以像''result':10000000000000'那樣使用某些東西,但是這當然會在某些時候導致內存和傳輸時間問題。正因爲如此,沒有「全部」。將所有結果收集到一個塊中可能比在大的情況下使用所提到的分頁變量更加昂貴。但5000個元素不應該帶來很大的問題。因此,如果您將10000作爲結果限制,您的情況可能會得到解決。 – Alfe

0
  1. 使用滾動API,如果文件數量超過10000
  2. 使用搜索API與限制獲得指定數量。