如果数组中的多个字段具有不同的值,则ElasticSearch将获取记录

33qvvth1  于 2022-12-11  发布在  ElasticSearch
关注(0)|答案(1)|浏览(130)

我在ElasticSearch中有以下文档

[
    {
      "class": " Grade 1",
      "subject": [
        "Mathematics",
        "German",
        "Geometry",
        "Arts",
        "Physical Education"
      ],
      "student": [
        {
          "name": "George",
          "id": "ORT-823FT"
        },
        {
          "name": "Travis",
          "id": "ORT-873FT"
        },
        {
          "name": "Scott",
          "id": "ORT-883FT"
        }
      ]
    },
    {
      "class": " Grade 2",
      "subject": [
        "Mathematics",
        "German",
        "Geometry",
        "French",
        "Arts",
        "Physical Education"
      ],
      "student": [
        {
          "name": "Gibbs",
          "id": "ORT-923DG"
        },
        {
          "name": "Elizabeth",
          "id": "ORT-973DG"
        },
        {
          "name": "Michale",
          "id": "ORT-983DG"
        }
      ]
    }
  ]

我只需要在学生姓名和ID匹配时获取文档,例如:如果学生姓名为乔治,id为ORT-823 FT,则应返回第一个文档。另一方面,如果学生姓名为Gibbs,id为ORT-923 DG,则必须返回第二个文档。
下面的查询对我来说很有效,但是有没有更好的方法来编写?

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "student.id": "ORT-823FT"
          }
        },
        {
          "match": {
            "student.name": "George"
          }
        }
      ]
      
      , "minimum_should_match": 2
    }
  }
}
a8jjtwal

a8jjtwal1#

你所做的是不正确的,因为你没有使用nested field来存储你的学生信息,因此id和name之间的关系丢失了,这在这个官方示例中得到了很好的解释。
您也可以尝试通过索引下面的文档

{
    "class": " Grade 2",
    "subject": [
        "Mathematics",
        "German",
        "Geometry",
        "French",
        "Arts",
        "Physical Education"
    ],
    "student": [
        {
            "name": "Gibbs",
            "id": "ORT-abc"
        },
        {
            "name": "Elizabeth",
            "id": "ORT-973DG"
        },
        {
            "name": "Michale",
            "id": "ORT-983DG"
        },
        {
            "name": "XYZ",
            "id": "ORT-923DG"
        }
    ]
}

Gibbs和id ORT-923DG的查询中也会出现这种情况,但不应该出现这种情况。
您需要使用nested query来获得所有情况下的预期结果。

相关问题