考虑以下JSON内容:
{
students: [
{
student_name: aaa,
classes: [
{
name: class1,
properties: {
id: 1
}
},
{
name: class2,
properties: {
id: 2
}
}
},
{
student_name: bbb,
classes: [
{
name: class2,
properties: {
id: 1
}
}
}
]
}
学生未嵌套类未嵌套。我只想通过以下查询匹配student_nameaaa文档:
{
"query": {
"bool": {
"must": [
{ "term": { "classes.name": "class1" }},
{ "term": { "classes.properties.id": "1" }}
]
}
}
}
但我的查询同时匹配aaa和bbb,因为它将我的术语语句视为单独的查询。我如何才能匹配学生aaa?
您必须将学生设置为嵌套类型。否则,它将变平,您的查询将与这两个文档匹配。
来自相同的ElasticSearch文档:
当摄取具有大的任意密钥集的键值对时,您可以考虑将每个键值对建模为其自己的嵌套具有键和值字段的文档。相反,可以考虑使用扁平数据类型,将整个对象映射为单个字段允许对其内容进行简单搜索。嵌套文档和查询通常很昂贵,因此使用的扁平数据类型这个用例是一个更好的选择。
请参考同一文档中给出的示例,您会清楚的。当student
更改为nested
时,您应该能够获得预期的结果。