2013-05-15 180 views
8

我想計算作爲大小限制查詢結果返回的文檔數量。例如,我運行以下查詢:ElasticSearch計數返回結果

curl -XGET http://localhost:9200/logs_-*/a_logs/_search?pretty=true -d ' 
{ 
"query" : { 
    "match_all" : { } 
}, 
"size" : 5, 
"from" : 8318 
}' 

,我也得到:

{ 
"took" : 5, 
"timed_out" : false, 
"_shards" : { 
"total" : 159, 
"successful" : 159, 
"failed" : 0 
}, 
    "hits" : { 
    "total" : 8319, 
    "max_score" : 1.0, 
    "hits" : [ { 
.... 

文檔總數匹配我的查詢是8319,但我拿來在最高5,因爲我詢問返回只有1號文件「從「8318.

在響應中,我不知道有多少文檔被返回。我想寫一個查詢,以便返回的文檔數量也存在於某個字段中。也許有些方面可能會有所幫助,但我無法弄清楚。請幫助。

+0

難道你不能只計數在客戶端的命中數組中的對象數量? – javanna

+0

這是一個昂貴的操作。在開始計算/處理單個對象之前,我想知道這個數字。 –

+0

無法讓信息恢復。這個想法是,如果你已經解析了json響應,讀取該數組的長度應該不是一個大問題,但是如果你有一個大的json對象,並且你使用pull解析器讀取它,那麼這是一個完全不同的故事。 – javanna

回答

1

通過文檔查看,不清楚如何使查詢返回此 - 如果確實API支持它。如果您只想獲得返回的匹配數,最簡單的方法似乎是在解析響應後自己對它們進行計數。

8

您的疑問:

{ 
"query" : { 
    "match_all" : { } 
}, 

=>就是說你問所有的數據

「大小」:5,

=>您希望只顯示5個結果

「from」:8318

=>您從8318條記錄開始

ElasticSearch respons:

....

"hits" : { 
    "total" : 8319, 

... =>彈性搜索告訴你,有8319個結果在他的指數。

你問他所有的結果和你開始從8318.

8319 - 8318 = 1所以,你有1個結果。

嘗試從中刪除。