Java查询ES,普通查询和嵌套查询同时存在

1、近期开发涉及到了ES搜索引擎的使用,涉及到的数据结构比较复杂,父子结构中还有嵌套查询。使用的是ElasticSearchTemplate设置SearchQuery对ES进行条件查询。当查询条件中有普通查询和嵌套查询同时存在时,出现了问题:

1.1 所有条件都为NestQueryBuilder时,设置的所有条件都会去Nested的path去查询符合条件的数据,当嵌套内容中没有对应的字段时,查询出来的数据为0.
1.2 所有条件为普通的QueryBuilder时,嵌套查询的内容会不生效。
1.3 当ElasticSearchTemplate设置多个query时,query条件会被覆盖掉,只会保存最后一个query,导致查询的数据不准确。

2、目前的解决办法是将嵌套查询的QueryBuilder设置QueryBuilders.boolQuery().filter,这样同时设置query和filter。

3、期待遇到更好的解决办法。

4、补充

4.1 父子结构查询
  • JoinQueryBuilders.hasChildQuery
4.2 kibana普通查询和嵌套查询
GET /goods_info/subject/_search
{
  "query": {
    "has_child": { -- 父子结构查询
      "type": "list", -- 索引类型
      "query": {
        "bool": {
          "must": [
            {"match": {
              "brandId": "17"
            }},
            {
              "nested": {
              "path": "labels", -- 嵌套路径
                "query": {
                  "bool": {
                    "must": [
                      {"match": {
                        "labels.labelType": "2" -- 路径字段
                      }},
                      {
                        "match": {
                          "labels.labelValue": "2"
                        }
                      }
                    ]
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}

你可能感兴趣的:(ES)