首页 > 解决方案 > org.elasticsearch 6.4.3 来自嵌套字段的查询值,无论其级别如何

问题描述

我正在使用库 org.elasticsearch 6.4.3 并且无法升级到另一个库版本。我对 spring data elasticsearch 的了解非常基础。

我需要一个查询来检查条件条件字段名称是否为fullName,但可以有多个嵌套条件条件。我下面只有3个级别。它可以出现在第 7 级或更高级别。

此外,这个解决方案真的很差,而且有些硬编码。我想问是否有办法缩短它,并且fullName无论嵌套条件标准的级别如何,都可以搜索字段名称是否等于。

        BoolQueryBuilder query = new BoolQueryBuilder();
        query.must(boolQuery()
                .must(boolQuery()
                        .should(termQuery("conditions.criteria.criterias.fieldName.keyword", "fullName"))
                        .should(termQuery("conditions.criteria.criterias.criterias.fieldName.keyword", "fullName"))
                        .should(termQuery("conditions.criteria.criterias.criterias.criterias.fieldName.keyword", "fullName"))
                )
        );

Elasticsearch 查询等效:

"bool" : {
  "should" : [
    {
      "term" : {
        "conditions.criteria.criterias.fieldName.keyword" : {
          "value" : "fullName",
          "boost" : 1.0
        }
      }
    },
    {
      "term" : {
        "conditions.criteria.criterias.criterias.fieldName.keyword" : {
          "value" : "fullName",
          "boost" : 1.0
        }
      }
    },
    {
      "term" : {
        "conditions.criteria.criterias.criterias.criterias.fieldName.keyword" : {
          "value" : "fullName",
          "boost" : 1.0
        }
      }
    }
  ],
  "adjust_pure_negative" : true,
  "boost" : 1.0
}

问题:

fullName无论条件条件的级别如何(多个嵌套),是否有更好/正确的方法来查询条件条件字段名称是否等于。我最初的解决方案就像上面的代码一样,但实际上仅限于 3 个级别。

我一直在搜索并找到嵌套查询,但我无法使其工作。也许我错误地使用了它,或者这不是解决方案。

编辑: 嵌套查询不起作用的原因是条件的映射类型不是嵌套的,并且映射中有 3 个级别的条件。有了这个 3 级标准字段名称检查就足够了......但也许有一种方法可以改进此代码。

标签: elasticsearchspring-data-elasticsearch

解决方案


推荐阅读