elasticsearch非嵌套数组中的多字段搜索

i2loujxw  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(653)
{
  students: [
    {
        student_name: aaa,
        classes: [
        {
            name: class1,
            properties: {
                id: 1
            }
        },
        {
            name: class2,
            properties: {
                id: 2
            }
        }
    },
    {
        student_name: bbb,
        classes: [
        {
            name: class2,
            properties: {
                id: 1
            }
        }
    }
  ]
}

学生不是嵌套的。类不是嵌套的。我只想通过下面的查询匹配学生姓名aaa文档

{
    "query": {
      "bool": {
         "must": [
         { "term": { "classes.name": "class1" }},
         { "term": { "classes.properties.id": "1" }}
         ]
      }
    }
}

但我的查询同时匹配aaa和bbb,因为它将我的term语句视为单独的查询。我怎么能和学生aaa比赛呢?

mpgws1up

mpgws1up1#

您必须将student设置为嵌套类型,否则,它将被展平,并且您的查询将匹配这两个文档。
来自同一个es文档
当使用一组大的、任意的键摄取键值对时,您可以考虑将每个键值对建模为它自己的带有键值和值字段的嵌套文档。相反,请考虑使用展平数据类型,它将整个对象Map为单个字段,并允许对其内容进行简单搜索。嵌套文档和查询通常比较昂贵,因此在这个用例中使用扁平化的数据类型是一个更好的选择。
请参考同一文档中给出的示例,您将清楚地了解这些示例的含义和时间 student 已更改为 nested 你应该能够得到你期望的结果。

相关问题