当前位置:  开发笔记 > 前端 > 正文

如何使用弹性搜索搜索嵌套对象

如何解决《如何使用弹性搜索搜索嵌套对象》经验,为你挑选了2个好方法。

好吧,到目前为止我还没弄清楚这一点.希望有人可以提供一些见解.

鉴于以下文档,我如何搜索视频标题中包含"test"的视频的所有文档?我正在使用HTTP API. (基本上,你如何使用弹性搜索搜索嵌套对象?我知道那里必须有文档,但我真的找不到任何文档.)

[{
    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"
    }
}]

dira.. 51

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

'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' and video.description: 'description2',并且视频没有嵌套,它会给你一个假的结果(因为test在第一个视频和description2第二个视频中,但在所有视频领域你都有).

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



1> dira..:

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

'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' and video.description: 'description2',并且视频没有嵌套,它会给你一个假的结果(因为test在第一个视频和description2第二个视频中,但在所有视频领域你都有).

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


这个答案提供了嵌套和简单存储子数组或对象之间的重要区别.嵌套在一个索引中创建额外的文档,并在@swatkins案例中不必要地使事情复杂化.

2> swatkins..:

好的,RTFM!我终于找到了这些页面(应该花费更多的时间预先使用文档)并且似乎我们设置了保存视频的属性:嵌套,然后使用嵌套查询.

http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html

http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html

希望这有助于有人在路上.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有