ES系列之原来查看文档数量有这么多姿势
1、引言
有人可能觉得,查看文档数量不是很简单吗?直接
GET /_cat/count/index_name?v
不就可以了吗。
事实上远不止这么简单,比如嵌套文档的情况等。相信你看了我这篇文章之后你会感叹原来统计文档有这么多讲究啊。
2、正文
cat/count
首先是最常用的的方式,也是一种快速查询文档的优先推荐方式,cat count api
我们使用kibana自带的电商索引来实验。
GET _cat/count/kibana_sample_data_ecommerce?v
返回,
epoch timestamp count
1585910697 10:44:57 4675
cat count api的方式能够快速的返回某个索引下文档的数量,需要注意的是已经删除的文档即使还没有物理删除(merge)也不会统计。我们可以来做个实验,任意删除一个文档,然后再次查询下。
DELETE kibana_sample_data_ecommerce/_doc/VJz1f28BdseAsPClo7bC
再次查询发现少了一条。
另外,使用cat count api我们也可以不指定索引,从而查询整个集群的文档数量。
GET _cat/count?v
GET _cat/indices
整个命令其实主要是用来查询索引相关的信息的,而这些信息里面包含文档的数量。 比如,
GET _cat/indices/kibana_sample_data_ecommerce?v
查询的结果如下,
docs.count
列就是文档的数量。
和cat count api不同的是,cat indices命令统计的文档数量是底层所有的文档数量,如果你不太明天,我举个例子。
我们新增一个测试的索引,使用nested嵌套文档,关于嵌套文档可以看看这篇文章,这里不详述了。
ES系列之嵌套文档和父子文档
新建一个索引,然后插入一个文档。
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 api
我们当然可以直接使用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列显示的是文档数量。
3、总结
ES对文档的统计根据不同的场景和维度,有不同的方法,在实际项目中根据业务场景选择适合自己的方式即可。
ES系列之原来查看文档数量有这么多姿势相关推荐
- 【Flutter】插件包选择 ( 查看文档是否全面 | 查看插件包的更新版本次数 | 查看使用示例 | 查看 GitHub 项目的 Star Fork Issues )
文章目录 一.插件包选择 二.查看文档是否全面 三.查看插件的更新版本次数 四.查看使用示例 五.查看 GitHub 项目的 Star Fork Issues 一.插件包选择 开发 Flutter 时 ...
- PG系列数据库TPCH测试文档
PG系列数据库TPCH测试文档 该文档适用于使用postgresql语法的数据库 一.机器环境 此次测试只为走通该测试的测试流程,准备的服务器是本地虚拟化的机器,故性能不具备参考价值 主机名 ip 内 ...
- Tips系列之飞书云文档
飞书云文档可谓是飞书套件中深受用户喜爱的功能之一,今天就给大家呈上几个小Tips,让你深入了解飞书云文档! 1. 新建在线文档.表格和文件夹 电脑桌面端 方式 1 点击飞书桌面端左侧的云文档按钮,登录 ...
- Linux下如何查看文档的内容
查看文档内容的命令有: cat tac head nl tail more less od cat命令显示文档的全部内容,当文档较大的时候只显示最后的部分,所以cat命令适合查看内容较少的文档.可加选 ...
- 第七课 环境变量PATH,cp、mv及查看文档cat/more/less/head/tail命令
一.环境变量(PATH)echo $PATH 查看环境变量的目录PATH=$PATH:/tmp/ (目录)给一个目录赋值环境变量: 让以上环境变量永久生效: 编辑 vi /etc/profile/ 把 ...
- 环境变量,cp,mv,查看文档命令
2019独角兽企业重金招聘Python工程师标准>>> 一.环境变量PATH echo $PATH 打印当前的环境变量 PATH=$PATH:路径 自定义环境变量 which查找某个 ...
- linux 查看 文档 不显示注释 命令
原文:http://www.weiruoyu.cn/?p=661 最近发现一个很好的命令,就是linux 查看 文档 不显示注释 的命令 [root@localhost ha.d]# cat ha.c ...
- Xcode中快速定位、快速查找、快速查看文档、快速解决不再打印等技巧
文章原文地址:http://blog.sina.com.cn/s/blog_68f324850102x4et.html 技巧一:快速定位 XGLog(@"----%s----%d------ ...
- 查看文档(API) (NSString)
查看文档(API) OC的数据类型 NSInteger: 整型(32 = int, 64 = long) CGFloat: 浮点型(32 = floa ...
最新文章
- 零配置Socket TCP消息通讯服务容器EC
- 开发日记-20190708 关键词 读书笔记 《Perl语言入门》Day 5
- C++中自定义比较函数和重载运算符总结
- 优化Nginx服务的安全配置
- python中的print()、str()和repr()的区别
- 成员函数后面加上const的作用
- [剑指offer]面试题第[41]题[Leetcode][第235题][JAVA][数据流中的中位数][优先队列][堆]
- Spark源码走读1——RDD
- python怎么抓取网页倒计时_python实现的简单窗口倒计时界面实例
- springboot添加webmagic_SpringBoot+Solr + webmagic JD商品爬取数据,放入solr中做搜索
- BZOJ 1831 逆序对
- 古田县争取高速公路的历程
- html如何嵌入手机,手机嵌入页面
- 极客君教你破解隔壁妹子的wifi密码,成功率高达90%
- [抄袭]年薪五万程序员的生活及他的理财梦
- 实习每日总结_20161212
- python微信公众号翻译功能_10分钟教你用Python实现微信翻译机器人
- 初级——程序如何打包成apk文件
- jemalloc源码解读(六)基数树
- cmd 命令行窗口切换目录 cd 命令操作方法