json - 如何使用 Elasticsearch 搜索嵌套对象

标签 json elasticsearch nested

好的,到目前为止,我还无法弄清楚这一点。希望有人能提供一些见解。

鉴于以下文档,我将如何搜索视频标题中包含“测试”的视频的所有文档?我正在使用 HTTP API。 (基本上,如何使用 Elasticsearch 来搜索嵌套对象?我知道肯定有文档,但我真的找不到。)

[{
    id:4635,
    description:"This is a test description",
    author:"John",
    author_id:51421,
    video: {
        title:"This is a test title for a video",
        description:"This is my video description",
        url:"/url_of_video"
    }
},
{
    id:4636,
    description:"This is a test description 2",
    author:"John",
    author_id:51421,
    video: {
        title:"This is an example title for a video",
        description:"This is my video description2",
        url:"/url_of_video2"
    }
},
{
    id:4637,
    description:"This is a test description3",
    author:"John",
    author_id:51421,
    video: {
        title:"This is a test title for a video3",
        description:"This is my video description3",
        url:"/url_of_video3"
    }
}]

最佳答案

您不一定需要嵌套视频;您可以将其映射为普通字段。这意味着它将存储

'video:title': "This is a test title for a video3",
'video:description':"This is my video description3",
'video:url':"/url_of_video3"

你可以搜索video.title:'test'

据我所知,当您有多个嵌套项并且您只想对嵌套项进行查询时,嵌套字段很有用。例如,拥有这些数据

[{
    id:4635,
    description:"This is a test description",
    author:"John",
    author_id:51421,
    video: [
      {
        title:"This is a test title for a video",
        description:"This is my video description",
        url:"/url_of_video"
      },
      {
        title:"This is an example title for a video",
        description:"This is my video description2",
        url:"/url_of_video2"
      }
    ]
},
{
    id:4637,
    description:"This is a test description3",
    author:"John",
    author_id:51421,
    video: [
      {
        title:"This is a test title for a video3",
        description:"This is my video description3",
        url:"/url_of_video3"
      }
    ]
}]

如果你搜索 video.title: 'test' 和 video.description: 'description2',并且 video 没有嵌套,它会给你一个虚假的结果(因为 test 在第一个视频中,description2 在第二个视频中,但在所有视频字段中你都有)。

在这种情况下,如果您将视频映射为嵌套,它会将每个视频作为一个单独的实体记住,并会搜索符合这些条件的单个视频,因此对于 video.title: 'test' 和 video.description : 'description2' 它不会返回任何内容,对于 video.title: 'example' 和 video.description: 'description2' 它将返回一个结果。

关于json - 如何使用 Elasticsearch 搜索嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140651/

相关文章:

python - 对嵌套迭代的理解?

python - 根据条件从嵌套列表中删除某些子列表

elasticsearch - 在 ElasticSearch 中搜索嵌套对象中的所有字段

cuda - 在我的程序中分配统一内存。运行后,它抛出 CUDA 错误 :out of memory, 但仍有可用内存

ios - 需要生成的 JSON 文档与 iOS 中 NSMutableDictionary 中插入的对象的顺序相同

android - 将 json 对象发送到服务器的问题

javascript - 如何动态更改当前菜单元素AngularJS的标题(指令中的模板)

javascript - 检查javascript数组值不为空

friend 到 friend 列表的 Elasticsearch 映射

database - 哪个NoSql可视化广泛的应用程序