有人可能以爲,查看文檔數量不是很簡單嗎?直接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對文檔的統計根據不一樣的場景和維度,有不一樣的方法,在實際項目中根據業務場景選擇適合本身的方式便可。