2013-05-15 183 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个结果。

尝试从中删除。