假设我有一个嵌套结构,例如A-> B-> C 我正在尝试创建一种查询构建器,以允许
这样的查询(A.a = 1 && A.B.b =2) || (A.B.b = 4 && A.B.C.c = 1)
或更复杂。为此,我使用了与同一路径相关的多个嵌套查询
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"a": {
"value": "1"
}
}
},
{
"nested": {
"path": "B",
"query": {
"term": {
"B.b": {
"value": "2"
}
}
}
}
}
]
}
},
{
"bool": {
"must": [
{
"nested": {
"path": "B",
"query": {
"term": {
"B.b": {
"value": "4"
}
}
}
}
},
{
"nested": {
"path": "B.C",
"query": {
"term": {
"B.C.c": {
"value": "1"
}
}
}
}
}
]
}
}
]
}
}
}
但是结果不是我期望的那样。我知道我可以将B.C.c条件移动为内部嵌套查询,但事实并非如此。也许要简化一下,我希望查询如下:
{
"query": {
"bool": {
"must": [
{
"nested"....
},
{
"nested" to the same path as index 0
}
]
}
}
}
成为A && B,但事实并非如此。对于查询,我很努力,似乎省略了第二个嵌套条件。
我需要构建的查询可能会将来自不同级别的条件分组在一起,并且每个条件可能在不同的组中多次使用。在这种情况下正确的方法是什么?
编辑: 似乎两个嵌套查询都在单独的嵌套文档上工作。是否有办法使它们在同一嵌套文档上运行并保留查询结构(两个嵌套查询,而不是一个)?因此,如果第一个嵌套查询的条件为A.a = 1,第二个嵌套查询的条件为A.b = 2,则结果为 A.a = 1 && A.b = 2个A.a = 1 || A.b = 2