有人可能以为,查看文档数量不是很简单吗?直接api
GET /_cat/count/index_name?v
不就能够了吗。app
事实上远不止这么简单,好比嵌套文档的状况等。相信你看了我这篇文章以后你会感叹原来统计文档有这么多讲究啊。函数
首先是最经常使用的的方式,也是一种快速查询文档的优先推荐方式,cat count api
咱们使用kibana自带的电商索引来实验。测试
GET _cat/count/kibana_sample_data_ecommerce?v
返回,spa
epoch timestamp count 1585910697 10:44:57 4675
cat count api的方式可以快速的返回某个索引下文档的数量,须要注意的是已经删除的文档即便尚未物理删除(merge)也不会统计。咱们能够来作个实验,任意删除一个文档,而后再次查询下。.net
DELETE kibana_sample_data_ecommerce/_doc/VJz1f28BdseAsPClo7bC
再次查询发现少了一条。code
另外,使用cat count api咱们也能够不指定索引,从而查询整个集群的文档数量。blog
GET _cat/count?v
整个命令其实主要是用来查询索引相关的信息的,而这些信息里面包含文档的数量。 好比,索引
GET _cat/indices/kibana_sample_data_ecommerce?v
查询的结果以下,ip
docs.count
列就是文档的数量。
和cat count api不一样的是,cat indices命令统计的文档数量是底层全部的文档数量,若是你不太明天,我举个例子。
咱们新增一个测试的索引,使用nested嵌套文档,关于嵌套文档能够看看这篇文章,这里不详述了。
新建一个索引,而后插入一个文档。
PUT my_index { "mappings": { "properties": { "user": { "type": "nested" } } } } PUT my_index/_doc/1 { "group" : "fans", "user" : [ { "first" : "John", "last" : "Smith" }, { "first" : "Alice", "last" : "White" } ] }
咱们先用cat count api查询下,结果是1,而后用cat indices查询,发现结果是3。这是为何呢?
这是由于cat indices是直接从lucene获取的这些信息,而咱们以前的文章讲过nested类型的属性其实在lucene内部是独立的文档,只不过在ES这一层隐藏了这些细节。
咱们固然能够直接使用search去统计文档数量,只要不指定查询条件,而后查询结果中的total就是文档的总数量。
GET kibana_sample_data_ecommerce/_search { "query": { "match_all": {} } }
结果是(只显示部分),
"hits" : { "total" : { "value" : 4673, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ {
不过search api有个问题,这个total最大只会显示10000个,这个我就不举例子了。
这里咱们能够进一步探讨一个问题,cat count api和search方式统计文档哪一个效率高?我没有找到官方文档,不过大概也能推断出前者应该是更快一些,由于查询还要算分,排名这些操做,应该更耗时。
咱们还能够利用ES的聚合函数统计文档数量,以下:
GET /kibana_sample_data_ecommerce/_search { "size" : 0, "aggs" : { "my_count" : { "value_count": { "field" : "_id" } } } }
结果是,
{ "took" : 24, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 4672, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "my_count" : { "value" : 4672 } } }
咱们这里用了Value Count Aggregation 按字段统计文档数量。
有时候咱们须要查看一个分片上文档数量,使用cat shards api能够作到。
GET _cat/shards/kibana_sample_data_ecommerce?v
能够看到这个索引下有两个分片,一个主分片一个副本分片,docs列显示的是文档数量。
ES对文档的统计根据不一样的场景和维度,有不一样的方法,在实际项目中根据业务场景选择适合本身的方式便可。