当前位置: 首页 > 知识库问答 >
问题:

Spring data Elasticsearch将Elasticsearch聚合查询转换为代码

孔乐邦
2023-03-14
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "id": {
              "value": 1111
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "sequence": {
      "terms": {
        "field": "sequence.keyword"
      },
      "aggregations": {
        "amount": {
          "sum": {
            "field": "amount"
          }
        }
      }
    },
    "totalAmount": {
      "sum_bucket": {
        "buckets_path": "sequence>amount"
      }
    }
  }
}

Spring数据ElasticSearch 3.2

final SearchQuery searchQuery =
        new NativeSearchQueryBuilder()
            .withQuery(QueryHelper.boolQueryBuilder(id))
            .addAggregation(
                terms("sequence")
                    .field("sequence.keyword")
                    .subAggregations(subAggregations()))
            .addAggregation(sumBucket("sum_bucket", "sequence>amount"))
            .build();

现在,由于NativeSearchQueryBuilder的addAggregation方法接受AbstractAggregationBuilder,并且sumBucket的类型为PipelineAggregationBuilder,因此无法将此值传递给addAggregation(sumBucket(“sum\u bucket”,“sequence

共有1个答案

呼延衡
2023-03-14

我刚刚检查了Spring数据Elasticsearch和Elasticsearch本身的代码。对于Spring Data Elasticsearch,当前无法使用PipelineAggregationBuilder派生聚合。

我不知道为什么Elasticsearch有两种不同的聚合类层次结构,但Spring Data Elasticsearch目前只能处理AggregationBuilder而不能处理PipelineAggregationBuilder派生类。

为此,我在Jira创建了一个问题。

 类似资料:
  • 问题内容: 我想将以下SQL查询转换为Elasticsearch之一。谁能帮上忙 我尝试了以下方法: 但不确定我是否做对了,因为它无法验证结果。似乎要在聚合内添加查询。 问题答案: 假设您使用Elasticsearch 2.x,则有可能在Elasticsearch中 具有 -semantics。我不知道2.0之前的可能性。 您可以使用新的Pipeline Aggregation Bucket Se

  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 我尝试使用下面的elasticsearch查询来处理Spring数据。目的是为字段返回唯一的结果。就像与SQL数据库进行比较一样。 我将该字段配置为关键字,它使查询在api中完美运行,如下所示: 我的问题是,当我尝试使用StringQuery运行时,相同的查询在Spring数据中不起作用,我得到以下错误。我猜它使用不同的api来运行查询。 我尝试过使用类型来实现相同的结果,没有重复和没有对象加载,

  • >[danger] 注意!!! 使用聚合功能时,必须给它一个别名,以便能够从模型中访问它 > 聚合函数的计算,都是排除了 null 值,所以COUNT( id ) 一般推荐用非空的主键来计算 COUNT 计算数量 const { Sequelize } = app; // 查询班级总人数,按照姓名聚合 const ret = await Student.findAll({ attribut

  • 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 方法 说明 count 统计数量,参数是要统计的字段名(可选) max 获取最大值,参数是要统计的字段名(必须) min 获取最小值,参数是要统计的字段名(必须) avg 获取平均值,参数是要统计的字段名(必须) sum

  • 问题内容: 我目前有类似的东西: 但是,myfield的值为“ alpha 1.0”,“ alpha 2.0”,“ beta 1.0”。现在,我只想聚合值“ alpha”,“ beta”。我怎么做?我试过了: 但我想这里没有拆分功能。欢迎任何建议! 问题答案: 我设法通过粘贴在问题中的链接来完成此任务: