愚者求师之过,智者从师之长。

为什么doc_count和和hits.total不一致?

Elasticsearch | 作者 benshell | 发布于2017年07月03日 | 阅读数:9410

hi~all :
      我使用官网的account.json来学习es,在聚合函数那里发现 state=ND的doc_count为21。而我使用 curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type:application/json' -d '{ 
"query":{"match_phrase":{"state","ND"}}
}'查询,查询结果ND的数量是24
 
为什么会出现hits.total和doc_count会不一致。百思不得其解,望各位大大不吝赐教。谢谢

https://www.elastic.co/guide/e ... .html
 
已邀请:

bowen

赞同来自:

doc_count 是聚合某一个字段值命中的文档数量,
hist.total 表示query 命中的总数,类似sql count(*)
例如:
sex 



 
聚合性别
出现
男2
女1
hits total 3

benshell

赞同来自:

谢谢回复,不过我还是不懂,按照你给的例子 sex=‘男’的也是2啊 与聚合性别的结果一样啊。我认为 query加了条件的hits.total 应该与聚合的doc_count一致才对,可是事实并非如此。这当中的原理可以解释一下吗?

bowen

赞同来自:

不一样哦,聚合时,所有的doc_count 相加 等于 hits.total

benshell

赞同来自:

我加了条件查询的

bowen

赞同来自:

你可以把你的query size 设置成hits.total 看看就知道了

benshell

赞同来自:

不会,请问怎样设置的? 后面加上截图,希望让问题形象一点
这个是加了条件的查询结果
ND24.png

这个是聚合函数的查询结果
ND21.png

 

benshell

赞同来自:

原因是这个,聚合函数默认size是10,而state=ND的有部分数据在某个shard中落在默认排序10以后,导致这部分state=ND的数据没有统计入去。聚合函数的运算方式,先从各个shard中取数,再合并起来的https://www.elastic.co/guide/e ... ounts

要回复问题请先登录注册