我在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
}
}
}
1条答案
按热度按时间a8jjtwal1#
你所做的是不正确的,因为你没有使用nested field来存储你的学生信息,因此id和name之间的关系丢失了,这在这个官方示例中得到了很好的解释。
您也可以尝试通过索引下面的文档
在
Gibbs
和idORT-923DG
的查询中也会出现这种情况,但不应该出现这种情况。您需要使用nested query来获得所有情况下的预期结果。