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对文档的统计根据不同的场景和维度,有不同的方法,在实际项目中根据业务场景选择适合自己的方式即可。
- Python 用OPEN读文件报错 ,路径以及r
- Oracle 12c PDB浅析(r9笔记第10天)
- merge语句导致的CPU使用率过高的优化(二) (r7笔记第9天)
- 网页爬虫-R语言实现基本函数
- Python中的random模块用于生成随机数
- 简单易学的机器学习算法——极限学习机(ELM)
- 图片数据集太少?Keras Image Data Augmentation 各参数详解
- 备库归档删除策略失效的问题分析 (r7笔记第6天)
- 优化算法——梯度下降法
- Java基础-26(02)总结网络编程
- 记一次数据同步需求的改进(二) (r7笔记第5天)
- Python信贷数据处理与初步分析(ZIP解压)
- web前端之锋利的jQuery八:jQuery插件的使用(表单验证、表单提交)
- 优化算法——牛顿法(Newton Method)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Centos安装高版本GCC
- Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
- Spring 注入集合的成员变量属性
- 深入理解JVM(③)Java的锁优化
- 解Bug之路-Nginx 502 Bad Gateway
- bootstrap v4 toast轻提示正确用法
- 精华 | SQL注入万能Bypass技巧
- 【STM32F429开发板用户手册】第31章 STM32F429的SPI总线基础知识和HAL库API
- Linux 查找当前目录下所有包含指定内容的文件
- 父子管道更有效地扩展应用及其存储库结构
- Go语言 | 你还在这样获取文件的大小吗?
- 如何在Gitlab流水线中对部署进行控制?
- 工具的使用 | Hydra暴力破解工具的用法
- “灯下黑”应用在windows隐身后门中的实践
- 渗透测试-信息收集命令总结