elasticsearch,aggregates,booleanquery,Java,Spring,elasticsearch,Aggregates,Booleanquery" /> elasticsearch,aggregates,booleanquery,Java,Spring,elasticsearch,Aggregates,Booleanquery" />

Java 如何在多个布尔查询的弹性搜索中生成查询

Java 如何在多个布尔查询的弹性搜索中生成查询,java,spring,elasticsearch,aggregates,booleanquery,Java,Spring,elasticsearch,Aggregates,Booleanquery,我想用spring框架在elasticsearch中动态生成多个布尔运算的查询 我在elasticsearch中的数据如下 { "masterID" : "<id>" "processedData": [ { "string_value": "22", "

我想用spring框架在elasticsearch中动态生成多个布尔运算的查询

我在elasticsearch中的数据如下

{
   "masterID" : "<id>"
   "processedData": [
                {
                    "string_value": "22",
                    "key": "a"
                },
                {
                    "string_value": "abc",
                    "key": "s"
                },
                {
                    "string_value": "xyz",
                    "key": "n"
                }
            ]
}
{
“主ID”:”
“处理数据”:[
{
“字符串值”:“22”,
“键”:“a”
},
{
“字符串值”:“abc”,
“键”:“s”
},
{
“字符串值”:“xyz”,
“键”:“n”
}
]
}

我想执行此布尔运算的查询((n=xyz)&&(s=abc))

要能够查询数组内部对象,您应该将处理的数据映射为嵌套类型,对象数组不能像您预期的那样工作,因为您无法独立于数组中的其他对象查询每个对象。如果需要能够做到这一点,那么应该使用嵌套数据类型而不是对象数据类型。更改映射后,可以使用bool查询进行嵌套查询,如下所示:

{
  "query": {
    "nested": {
      "path": "processedData",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "key": "n"
              }
            },
            {
              "match": {
                "string_value": "xyz"
              }
            }
          ]
        }
      }
    }
  }
}
有关更多信息,您可以在此处查看: