了解一下nested数据类型

假设一个索引里要存一个对象数组,如下:

PUT my-index/_doc/1
{
  "group" : "fans",
  "user" : [ 
    {
      "first" : "John",
      "last" :  "Smith"
    },
    {
      "first" : "Alice",
      "last" :  "White"
    }
  ]
}

如上,有两个user对象,一个叫John Smith,一个叫Alice White。

然后以上数据会被扁平化处理成如下格式:

{
  "group" :        "fans",
  "user.first" : [ "alice", "john" ],
  "user.last" :  [ "smith", "white" ]
}

可以来试着搜索看下结果,如下:
了解一下nested数据类型_第1张图片
本来按照逻辑,以上是要搜索出名为Alice Smith的人,而数据中自然是没有没有这个对象的,但是结果却搜出了两个,该问题就是扁平化处理导致的。

所以才需要使用nested数据类型。

接下来看看使用nested数据类型的效果,先删除索引my-index,如下:
在这里插入图片描述
再新建my-index索引,不过这次先定义好user对象的类型是nested,如下:
了解一下nested数据类型_第2张图片
然后再次新增数据,如下:
了解一下nested数据类型_第3张图片
再次重复之前的搜索,结果如下:
了解一下nested数据类型_第4张图片
结果为空,符合预期,因为数据中确实没有名为Alice Smith的人。

总结

使用嵌套类型(nested数据类型),可以防止数据出现扁平化的错误。

你可能感兴趣的:(Elasticsearch)