身安不如心安,屋宽不如心宽 。

关于nested索引的问题

Elasticsearch | 作者 Charele | 发布于2022年02月27日 | 阅读数:1185

比如有这么一个索引,结构大概是这样的
name: text
sons { type: nested, name: text }
 
我插入数据
{"老王", sons { "小王" }}
其实是插入两个文档的,
但在_search的时候,或者是在_count的时候,
它显示是一个文档呢?
已邀请:

FFFrp

赞同来自:

两个文档是Lucene 层面的说法,可以看下 _cat/indices?v 里面的 docs.count 就是两个,这个显示的是 Lucene的 文档数

Ombres

赞同来自:

es使用lucene的join机制,父子文档在同一个block内
有以下三个doc,A,B,C,他们有子文档1,2......
A - 1,2,3
B - 4
C - 5,6
在索引中:1,2,3,A,4,B,5,6,C
 
es中的nested查询使用ToParentBlockJoinQuery,大概的原理是二次查询,先查询子query查到符合的DISI,二次查父文档,把父文档的匹配结果返回。优化的地方在于子文档匹配到以后,向后追最近的一个父文档id就是该子文档的父文档

要回复问题请先登录注册