【发布时间】:2014-12-30 13:20:08
【问题描述】:
基本问题如下:
是否有一种方便的方法可以为嵌套查询的所有字段指定多字段匹配?
对于普通查询{ match : { _all : "query string" }} 有效。
这在嵌套查询中不起作用,可能是因为嵌套对象没有 _all?
更详细的问题如下:
我有一个名为“Parent”的嵌套文档,如下所示:
{
"children" : [
{
"field_a": "value_a_1",
"field_b" : "value_b_1",
"field_c" : [ {
"field_c_a" : "value_c_a_1",
"field_c_b" : "value_c_b_1"
} ]
},
{
"field_a": "value_a_2",
"field_b" : "value_b_2",
"field_c" : [ {
"field_c_a" : "value_c_a_2",
"field_c_b" : "value_c_b_2"
} ]
}
]
}
这是我用来制作子嵌套对象的映射:
"Parent" : {
"properties" : {
"children" : {
"type" : "nested",
"include_in_parent" : true
}
}
}
这是一个查询,我想在所有子字段查询和一个术语查询上使用匹配来选择一些术语:
"query" : {
"nested": {
"path" : "children",
"query" : {
"bool" : {
"must" : [
{"multi_match" : {"query": "value_c_a_1", "fields" : ["children.*"]}},
{"term" : {children.field_a : "value_a_1" }}
]
}
}
}
}
上述查询不起作用,因为我无法选择嵌套对象的多重匹配查询中的所有字段。
"query" : {
"nested": {
"path" : "children",
"query" : {
"bool" : {
"must" : [
{"multi_match" : {"query": "value_c_a_1", "fields" : ["*_c_a"]}}
]
}
}
}
}
上面的查询有效,因为模式匹配允许将 * 放在字符串之前,但由于某种原因不能放在字符串之后 (?)
有没有一种很好的速记方法来选择嵌套对象的所有字段?
如果知道为什么预期的 children.* 通配符不能按预期工作也会很高兴。
【问题讨论】:
标签: elasticsearch