Logo
    立即注册
    数说方舟
    产品文档
    嵌套字段筛选指引
    最近更新时间:2022-10-21 10:30:59

    基础知识

    什么是嵌套字段

    可参考:嵌套与非嵌套在应用中的差别

    总的来说,嵌套字段是为了保存多个标签之间的关联关系的;一般来说,一条数据中的嵌套字段都是会有多组关联关系;

    比如链接的文档中:”华为”与”Mate20 Pro” 是一组关联关系,“苹果”与“iPhoneX”是一组关联关系。

    编辑筛选条件必知

    • 嵌套字段要基于关联关系查询,需在同一个@()中声明。
    • 不同嵌套字段不能在同个@()

    场景案例

    案例数据

    比如有一下4条数据(其中表格中 “-” 符号代表该字段为空) file

    案例一:查找出一级维度为空且二级维度为空

    • 筛选条件:1.一级维度为空、2.二级维度为空;
    • 筛选逻辑:@(1 AND 2)
    • 结果: id=1、id=3 的数据被查询出来

    案例二:查找出一级维度非空且二级维度非空

    • 筛选条件:1.一级维度不为空、2.二级维度不为空;
    • 筛选逻辑:@(1 AND 2)
    • 结果: id=1、id=2 的数据被查出来

    说明:为什么案例一和案例二两种截然相反的查询条件中,id=1 的数据都被查出来了?这就要说一下es中嵌套字段的查询机制了,前面说过一条数据中的嵌套字段是存在多组关联关系的,只要在多组关联关系中,存在一组关联关系满足筛选器的查询逻辑,那么该条数据就会被命中;如案例一中,第三组关联关系中一级维度和二级维度都是空,所以满足条件;案例二中,第一组和第二组关联关系都满足查询条件。 file

    案例三:查找出一级维度为空或二级维度为空

    • 筛选条件:1.一级维度为空、2.二级维度为空;
    • 筛选逻辑:@(1 OR 2)
    • 结果: id=1、id=2、id=3、id=4 的数据都被查询出来

    案例四:查找出一级维度非空或二级维度非空

    • 筛选条件:1.一级维度不为空、2.二级维度不为空;
    • 筛选逻辑:@(1 OR 2)
    • 结果: id=1、id=2、id=4 的数据都被查询出来

    案例五:查找出不存在一级维度为空且二级维度为空

    • 筛选条件:1.一级维度为空、2.二级维度为空;
    • 筛选逻辑:!(@(1 AND 2))
    • 结果: id=2、id=4 的数据都被查询出来

      注意:这里的筛选逻辑加了感叹号 !,表示取反逻辑,也就是说 过滤掉满足 @(1 AND 2) 逻辑的数据(这里说的数据指的是id=1、2这些整条数据,而不是关联关系)

    案例六:查找出不存在一级维度非空且二级维度非空

    • 筛选条件:1.一级维度不为空、2.二级维度不为空;
    • 筛选逻辑:!(@(1 AND 2))
    • 结果: id=3、id=4 的数据都被查询出来

    案例七:查找出一级维度且二级维度全部关联关系非空

    • 筛选条件:1.一级维度为空、2.二级维度为空;
    • 筛选逻辑:!(@(1 OR 2))
    • 结果:没有符合条件的数据

    案例八:查找出一级维度且二级维度全部关联关系为空

    • 筛选条件:1.一级维度不为空、2.二级维度不为空;
    • 筛选逻辑:!(@(1 OR 2))
    • 结果: id=3 的数据都被查询出来

    案例九:查找出一级维度=功效,且二级维度全为空

    • 筛选条件:1.一级维度为功效、2.二级维度不为空;
    • 筛选逻辑:@(1) AND !@(2)
    • 结果:没有符合条件的数据

    我们把Id2 改造下,你觉得这条数据能被查找出来么。 file

    答案是可以的。

    解疑系列

    筛选了嵌套字段「品牌」为空AND「一级品类」为空,为啥筛选结果还是有值的

    file A:若你要全为空的数据,请参考上面案例八。 file 可能你还有疑问,为啥这里显示的关联关系的一级品类都是非空的,为啥还能展示出来? 你需要关注下这个嵌套字段,可不止这两个字段,我们把‘混合产品名’也显示出来,这时候你就可以发现这个关联关系中存在「品牌名为空且一级品类为空」了。

    file

    @(1 AND 2) 和 @(1) AND @(2) 两者是啥区别?

    假设:1.一级维度为空 2.二级维度为空

    • 对于@(1 AND 2)来说,必须有关联关系同时存在满足1和2的逻辑。
    • 对于@(1) AND @(2) 来说,行数据(这里的行指的是ID1,ID2这种角度下的 )同时满足即可。

    举例来说,下面ID1就不满足@(1 AND 2)。但满足@(1) AND @(2) file

    话音刚落,这里就有个不成熟的小问题,你觉得 @(1 OR 2) 和 @(1) OR @(2) 两者又是啥区别?

    -这两者没有区别,只要一行数据中满足其一即可。即上面的数据也是满足 @(1 OR 2) 和 @(1) OR @(2) 的。

    我们在上面的数据基础上,一级维度添加‘成分’,变化如下: file

    这样的数据虽然既不满足@(1 AND 2) 也不满足@(1) AND @(2) 。但满足 @(1 OR 2) 和 @(1) OR @(2) 。

    嵌套字段的行内筛选有个小规则

    先看个问题,嵌套字段行内筛选后,有数据内容,但聚合出来的数据都是空的? 首先看下用户的筛选器内容,基于上面的学习,我们知道是想找出品牌名全是空,并且二级品类为‘保湿滋养’的数据。

    如愿找到4046529条数据,但针对二级品类做聚合却是空的。 这里是因为“行内筛选”时,同个嵌套字段,我们会按最后一个筛选字段去取。现在品牌名是后者,因此基于品牌名去取,结果品牌名全是空。 解决方式,把品牌名和二级品类换个位置。

    微信扫描二维码在线咨询