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

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

鉴于以下文档,我将如何搜索视频标题中包含“测试”的视频的所有文档?我正在使用 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' 它将返回一个结果。

https://stackoverflow.com/questions/8140651/

相关文章:

json - 从动态 json 数据更新力有向图上的链接

ruby-on-rails - rails : Render Json Status Problem

json - PostgreSQL 嵌套 JSON 查询

c# - Web API 复杂参数属性全部为空

java - 在java中查询一个JSONObject

c# - 反序列化客户端 AJAX JSON 日期

javascript - 脚本5009 : 'JSON' is undefined

json - 可以引用 JSON 数字吗?

json - 服务器响应在中途被切断

c# - 使用 Json.Net 以 dd/MM/yyyy 格式反序列化日期