1

我一直在逐步使用 Elasticsearch,在研究一个单独的问题时,我遇到了这个问题。在这里,swatkins 询问有关查询嵌套对象的问题,一位响应者指出,鉴于他的模型,嵌套对象不是必需的。我在这里复制了模型,并进行了一些更改以反映我的特定问题:

[{
    id:4635,
    description:"This is a test description",
    author:"John",
    author_id:51421,
    meta: {
        title:"This is a test title for a video",
        description:"This is my video description",
        url:"/url_of_video"
        awesomeness-level: "pretty-awesome"
        kung-fu: true
    }
},
{
    id:4636,
    description:"This is a test description 2",
    author:"John",
    author_id:51421,
    meta: {
        title:"This is an example title for a video",
        description:"This is my video description2",
        url:"/url_of_video2"
        kung-fu:false
        monsters:true
        monsters-present: "Dracula, The Mummy"
    }
}]

我们的应用程序允许用户定义自定义元数据,因此我们使用嵌套对象来表示该数据。乍一看,它看起来类似于 swatkins 的模型,所以我想也许我们不应该使用嵌套对象。

最大的区别是每个对象的元数据可能不同,请注意第二个视频有专门关于“怪物电影”的元数据,而第一个视频引用了一个“令人敬畏的级别”。那么,我应该使用嵌套对象,还是仅将元数据映射为普通字段?如果我们做后者,第一个视频会有空的元数据字段吗?这真的很重要吗?提前致谢!

4

1 回答 1

1

假设您的示例代表两个弹性搜索文档,看起来您不需要制作meta嵌套对象。当一个父对象有多个嵌套对象并且您的搜索涉及嵌套对象的多个字段时,使用嵌套对象是有意义的。例如,如果您有这样的记录:

{
  "name": "apple",
  "attributes": [
     {
       "color": "yellow",
       "size": "big"
     },
     {
       "color": "red",
       "size": "small"
     }
  ]
}

并且您希望在搜索时找到此记录,color:yellow AND shape:big或者color:red AND shape:small不希望在搜索时返回它,制作嵌套对象color:yellow AND shape:small是有意义的。attributes它将允许您独立索引和搜索每个属性,然后获取匹配属性的父对象。

于 2013-01-16T17:53:56.213 回答