有个多层级对象需要储存到es
[{name:"张三",subject:[{name:"english",score:50},{name:"math",score:90}]},
{name:"李四",subject:[{name:"english",score:90},{name:"math",score:50}]}]
使用object实际储存结果
{name:"张三",
subject.name:"english",
subject.score:50,
subject.name:"math",
subject.score:90
}
使用nested实际储存结果
{name:"张三",subject:[{subject_name:"english",score:50},{subject_name:"math",score:90}]}
需要查询数学90分的学生
使用object的查询
会查出来两条数据,但实际需求应该只有张三。
但是使用nested就可以实现,查询方法为
GET /order/search
{
"query": {
"bool": {
"must": {
"nested": {
"path": "subject",
"query": {
"bool": {
"must": [{
"term": {
"subject.subject_name": "math"
}
}, {
"term": {
"subject.score": 90
}
}]
}
}
}
}
}
}
}