Elastic: 同一条索引,使用GET _cat/indices?v与GET index/_count查询出来的文档数为什么不同?

简介: 首先我们来看官方文档中对于_cat/indices的解释:原文:These metrics are retrieved directly from Lucene, which Elasticsearch uses internally to power indexing and search. As a result, all document counts include hidden nested documents.

1. 解析

首先我们来看官方文档中对于_cat/indices的解释:
原文:
These metrics are retrieved directly from Lucene, which Elasticsearch uses internally to power indexing and search. As a result, all document counts include hidden nested documents.

译文:
这些指标是直接从Lucene中获取的,Elasticsearch内部使用Lucene来支持索引和搜索。因此,所有的文档计数都包括隐藏的嵌套文档

其实看到官方文档的解释答案已经明了了,我们看到最后一句:使用_cat/indices的查询是会将doc中隐藏的嵌套文档给查出来,看到这里可能不太清楚Nested结构的同学会比较迷糊,简单来说呢,就是当我们使用nested数据类型的时候,除了本身的doc之外,是会创建一个嵌套子对象的doc的,有多少个对象就会创建多少个隐藏嵌套doc

下面我们举例说明

2. 案例

数据

PUT test_nested
{
  "mappings": {
    "properties": {
      "tags": {
        "type": "nested"
      }
    }
  }
}

POST test_nested/_bulk
{"index":{}}
{"my_id":1,"tags":[{"name":"1","title":"1"},{"name":"1","title":"1"}]}
{"index":{}}
{"my_id":1,"tags":{"name":"1","title":"1"}}

_count查询

GET test_nested/_count

结果

{
  "count" : 2,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  }
}

_cat/indices查询

GET _cat/indices?v 

结果
在这里插入图片描述

2.1 解析

我们查看原数据,tags是nested类型的,doc1中tags为数组,下面有两个子对象,因此嵌套隐藏doc为2,doc2中tags下只有一个嵌套子对象{"name":"1","title":"1"},因此隐藏doc为1,加上本身的两个doc,总共的doc数为:2+2+1=5

因此_cat/indices查询的doc数就是5
而_count是不会查询隐藏doc的,所以数量为2

POST test_nested/_bulk
{"index":{}}
{"my_id":1,"tags":[{"name":"1","title":"1"},{"name":"1","title":"1"}]}
{"index":{}}
{"my_id":1,"tags":{"name":"1","title":"1"}}

3 拓展

我们知道join类型也是一对多的结构,但是我们测试可知,join类型并不会创建嵌套隐藏doc,也就是说join类型的GET _cat/indices?v与GET index/_count结构是一致的

目录
相关文章
|
缓存 人工智能 自然语言处理
阿里云百炼工作流新版功能介绍
阿里云百炼工作流全新升级,带来十大优化:对话与任务模板合并、UI界面焕新、画布性能提升、布局优化、新增流程输入输出节点、报错机制改进、聚合分组功能、参数提取节点、绘画变量记忆增强、失败重试机制。提升流程设计效率与稳定性,助力开发者高效构建AI应用。
917 1
|
存储 网络架构
Next.js 实战 (四):i18n 国际化的最优方案实践
这篇文章介绍了Next.js国际化方案,作者对比了网上常见的方案并提出了自己的需求:不破坏应用程序的目录结构和路由。文章推荐使用next-intl库来实现国际化,并提供了详细的安装步骤和代码示例。作者实现了国际化切换时不改变路由,并把当前语言的key存储到浏览器cookie中,使得刷新浏览器后语言不会失效。最后,文章总结了这种国际化方案的优势,并提供Github仓库链接供读者参考。
1030 0
Next.js 实战 (四):i18n 国际化的最优方案实践
阿里云CloudOps MCP正式上架百炼平台MCP市场
阿里云CloudOps MCP现已集成至百炼平台官方MCP市场,用户可便捷使用并将其集成到智能体应用中。配置方法包括登录百炼平台,在MCP市场找到阿里云CloudOps MCP,完成开通、角色创建与权限设置,选择部署模式及地域后确认开通。随后可通过“添加到智能体”或在应用管理中集成到现有智能体或工作流应用。更多示例与权限细则详见文档,欢迎加入钉钉交流群获取支持。
|
机器学习/深度学习 人工智能 自然语言处理
【Prompt Engineering提示工程技术:思维树 (ToT)、检索增强生成 (RAG)、自动推理并使用工具 (ART)】
思维树(ToT)框架,旨在解决复杂任务,通过构建一棵思维树,利用语言模型生成并评估中间步骤,结合搜索算法(如广度优先搜索)进行系统探索。ToT在不同任务中需定义思维步骤及候选数量,如“算24游戏”需三分步骤,每步评估可行性。实验表明,ToT显著优于其他提示方法。此外,ToT框架可结合强化学习不断进化,提升解决复杂问题的能力。
960 1
【Prompt Engineering提示工程技术:思维树 (ToT)、检索增强生成 (RAG)、自动推理并使用工具 (ART)】
|
安全 测试技术 索引
Pytest系列(17)- pytest-xdist分布式测试的原理和流程
Pytest系列(17)- pytest-xdist分布式测试的原理和流程
689 0
|
数据采集 搜索推荐 机器人
|
关系型数据库 MySQL Java
如何快速搭建自己的阿里云服务器(宝塔、Xshell、Xftp配置)(二)
如何快速搭建自己的阿里云服务器(宝塔、Xshell、Xftp配置)
643 0
|
前端开发 API 容器
Vue2使用vant实现_网易云音乐案例(可跟做练手项目)(二)
Vue2使用vant实现_网易云音乐案例(可跟做练手项目)(二)
653 0
Vue2使用vant实现_网易云音乐案例(可跟做练手项目)(二)
|
JavaScript
关于js报错Cannot set properties of undefined (setting ‘innerHTML‘)的问题
关于js报错Cannot set properties of undefined (setting ‘innerHTML‘)的问题
763 0
|
负载均衡 网络协议 关系型数据库
Docker 多容器编排Swarm(六)
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
841 0
Docker 多容器编排Swarm(六)

热门文章

最新文章