可参考:嵌套与非嵌套在应用中的差别
总的来说,嵌套字段是为了保存多个标签之间的关联关系的;一般来说,一条数据中的嵌套字段都是会有多组关联关系;
比如链接的文档中:”华为”与”Mate20 Pro” 是一组关联关系,“苹果”与“iPhoneX”是一组关联关系。
比如有一下4条数据(其中表格中 “-” 符号代表该字段为空)
说明:为什么案例一和案例二两种截然相反的查询条件中,id=1 的数据都被查出来了?这就要说一下es中嵌套字段的查询机制了,前面说过一条数据中的嵌套字段是存在多组关联关系的,只要在多组关联关系中,存在一组关联关系满足筛选器的查询逻辑,那么该条数据就会被命中;如案例一中,第三组关联关系中一级维度和二级维度都是空,所以满足条件;案例二中,第一组和第二组关联关系都满足查询条件。
注意:这里的筛选逻辑加了感叹号 !,表示取反逻辑,也就是说 过滤掉满足 @(1 AND 2) 逻辑的数据(这里说的数据指的是id=1、2这些整条数据,而不是关联关系)
我们把Id2 改造下,你觉得这条数据能被查找出来么。
答案是可以的。
A:若你要全为空的数据,请参考上面案例八。 可能你还有疑问,为啥这里显示的关联关系的一级品类都是非空的,为啥还能展示出来? 你需要关注下这个嵌套字段,可不止这两个字段,我们把‘混合产品名’也显示出来,这时候你就可以发现这个关联关系中存在「品牌名为空且一级品类为空」了。
假设:1.一级维度为空 2.二级维度为空
举例来说,下面ID1就不满足@(1 AND 2)。但满足@(1) AND @(2)
话音刚落,这里就有个不成熟的小问题,你觉得 @(1 OR 2) 和 @(1) OR @(2) 两者又是啥区别?
-这两者没有区别,只要一行数据中满足其一即可。即上面的数据也是满足 @(1 OR 2) 和 @(1) OR @(2) 的。
我们在上面的数据基础上,一级维度添加‘成分’,变化如下:
这样的数据虽然既不满足@(1 AND 2) 也不满足@(1) AND @(2) 。但满足 @(1 OR 2) 和 @(1) OR @(2) 。
先看个问题,嵌套字段行内筛选后,有数据内容,但聚合出来的数据都是空的? 首先看下用户的筛选器内容,基于上面的学习,我们知道是想找出品牌名全是空,并且二级品类为‘保湿滋养’的数据。
如愿找到4046529条数据,但针对二级品类做聚合却是空的。 这里是因为“行内筛选”时,同个嵌套字段,我们会按最后一个筛选字段去取。现在品牌名是后者,因此基于品牌名去取,结果品牌名全是空。 解决方式,把品牌名和二级品类换个位置。
产品咨询
020-38061725
微信扫描二维码在线咨询