概念及适用场景
官方释义:这个nested类型是object[1]一种数据类型,允许对象数组以相互独立的方式进行索引
适用场景:字段值为复杂类型的情况,说人话,就是字段值为 json 兑现的时候。
案例演示
场景:假设我们有一个订单索引:order,其包含了订单名称、商品数量、订单总金额以及订单商品明细等数据


需求:查询订单商品中商品名称为dishwasher并且商品价格为1999的订单信息,尝试执行以下脚本

结果
按照bool中must的查询逻辑,两个条件都符合的数据并不存在,然而执行查询后发现返回以下结果

原因
可以看到上述结果元数据中出现了订单数据,这和预期结果不一致。
分析原因如下:
当字段值为复杂数据类型(Object、Geo-Point等)的时候,ES内部实际是以如下方式保存数据的:
上述例子中goods_list中每个对象元素的属性值被扁平化存储在了数组中,此时已丢失了对应关系,因此无法保证搜索的准确。

解决方案
使用Nested类型
用法
上述问题解决办法即对复杂类型使用Nested类型。在ES中嵌套类型不止Nested一种,但是只有Nested是单独的考点,因此其他的暂不需考虑。
1:创建Mapping:在Mapping中为复杂类型指定Nested类型

2:写入数据再次写入数据,此处省去此步骤代码。3:验证结果执行查询,实际为query外层进行了一层嵌套。



你们点点“分享”,给我充点儿电吧~
文章转载自Elasticsearch之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





