使用 Java 进行 ElasticSearch 聚合

2023-11-25

我想在我的 java 应用程序中进行聚合。

首先,我使用curl 构建了REST 查询。它看起来像:

curl -XGET 'localhost:9200/analysis/_search?pretty' -H 'Content-Type: 

application/json' -d'
{
  "size": 0,
  "query" : {
      "bool": {
          "must": [
              { "term" : { "customer_id" : 5117 } }
          ]
      }
  },
  "aggs": {
    "customer_id": {
      "terms": {
        "field": "customer_id", 
        "order": {
          "contract_sum": "desc"
        }
      },
      "aggs": {
        "contract_sum": {
          "sum": {
            "field": "contract_sum"
          }
        }
      }
    }
  }
}
'

它返回了我预期的结果

enter image description here

之后我用java创建了一些代码

    Settings settings = Settings.builder().put("cluster.name", elasticProperties.getElasticClusterName()).build();
    log.info("Initializing ElasticSearch client");
    try (TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(
            InetAddress.getByName(elasticProperties.getElasticTransportAddress()), elasticProperties.getElasticTransportPort()))) {

        // Base query
        log.info("Preparing query");
        SearchRequestBuilder requestBuilder = client.prepareSearch(elasticProperties.getElasticIndexName())
                .setTypes(elasticProperties.getElasticTypeName())
                .setSize(Top);

        // Add aggregations
        AggregationBuilder aggregation =
                AggregationBuilders
                        .terms("customer_id")
                        .field("customer_id")
                        //.order(Terms.Order.aggregation("customer_id", "contract_sum", false))
                        .subAggregation(
                                AggregationBuilders.sum("total_contract_sum")
                                .field("contract_sum")
                        );
        requestBuilder.addAggregation(aggregation);
        // Get response
        log.info("Executing query");
        SearchResponse response = requestBuilder.get();

        log.info("Query results:");

        Terms contractSums = response.getAggregations().get("customer_id");
        for (Terms.Bucket bucket : contractSums.getBuckets()) {
            log.info("  " + bucket.getKey() + " ");
        }

问题是:

如何获取当前桶项的“contract_sum”聚合值?

当我在 IntelliJ Idea 中使用调试工具时,它似乎可以

enter image description here

请帮我提供代码示例。


我和我的网友找到了解决方案

log.info("Query results:");
Terms contractSums = response.getAggregations().get("customer_id");
for (Terms.Bucket bucket : contractSums.getBuckets()) {
    Sum aggValue = bucket.getAggregations().get("total_contract_sum");
    DecimalFormat formatter = new DecimalFormat("0.00");
    log.info("  " + bucket.getKey() + " " + formatter.format(aggValue.getValue()));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 进行 ElasticSearch 聚合 的相关文章

随机推荐

  • 在 Go 中使用原始套接字

    我正在尝试编写一个程序 该程序接收 DHCP 发现 UDP 并根据 DHCP 数据包中特定字段 GIADDR 的内容 使用不同的源 IP 地址将它们转发到给定的 IP 地址 我可以开始处理接收和发送位 但在使用本地计算机上未配置的 IP 地
  • 是否可以检查 jQuery.post() 的超时?

    我有这段代码请求来自 mysql 数据库的一些文件夹信息 function gotoDir pmcat id pcat id slideshowContainer html img class loader src javascript a
  • 编译器是否对异步方法链执行“返回值优化”

    不是传统意义上的返回值优化 但我想知道你什么时候会遇到这样的情况 private async Task Method1 await Method2 private async Task Method2 await Method3 priva
  • Objective-C 类参考:符号未找到错误

    我已经在这个 iPhone 应用程序上工作了一段时间了 我已经完全完成并可以使用它了 我正在扩展的项目是从在线颠覆存储库下载的 我的教授也给了我访问权限 我不小心没有下载 根 副本或类似的东西 所以我无法向存储库提交任何更改 在老师的帮助下
  • 为什么 stddef.h 不在 /usr/include 中?

    我已经编译了gnu标准库并将其安装在 GLIBC INST 现在 我尝试编译一个very简单的程序 仅使用一个 include include
  • 如何通过切片符号 a[::-1] 解释序列的反转

    来自python org 教程 切片索引有有用的默认值 省略的第一个索引默认为零 省略的第二个索引默认为被切片的字符串的大小 gt gt gt a hello gt gt gt print a 1 olleh 正如教程所说a 1 应该等于a
  • 将变量从 PHP 导出到 shell

    我正在尝试设置一个可以从 PHP 外部访问的变量 理想情况下 这应该是局部变量 但也欢迎环境变量 首先 我尝试过putenv 但这没有给出结果 php r putenv PHP TEST string 回显 PHP TEST 当我打电话时g
  • Altair 中 mark_text 的格式文本

    我正在尝试创建一个类似于以下内容的图表多行工具提示示例 但我想格式化正在打印的字符串 以便在末尾添加一些文本 我正在尝试修改这部分 Draw text labels near the points and highlight based o
  • 用于分割嵌套坐标字符串的正则表达式

    我有一个格式的字符串 1 2 2 3 3 4 具有任意数量的元素 我试图将它拆分为分隔坐标的逗号 即检索 1 2 2 3 and 3 4 我可以用Java正则表达式来做吗 我是一个十足的菜鸟 但希望 Java 正则表达式足够强大 如果不是
  • WebSphere 7. 从另一个应用程序注入 EJB

    我正在尝试使用 EJB 注释注入 EJB 当我将一个 EJB 注入同一只耳朵中的另一个 EJB 时 它工作正常 当我从同一耳朵的另一只耳朵将一个 EJB 注入另一个 EJB 时 服务器我得到一个异常 EJB 在调用期间抛出意外的 未声明的
  • 如何确定网络服务器运行的是 Linux 还是 Windows? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我被要求查明某个特定站点是否运行 Windows 或 Linux 作为其网络服务器 通常我们可以访问 我只需上传一个 phpinfo 文件 这将为我提供所需的所有相关信息 但是我们
  • 适用于 Java 的 Eclipse IDE - 全深色主题

    有什么办法可以让Eclipse彻底变成黑暗IDE吗 这是一个Picture我要问的 我不介意花 1 小时的时间来做这样的事情 D EDIT As Konstantin Komissarchik said I had to modify my
  • 为 Actionbar SearchView 创建异步 ContentProvider

    我的 ActionBar 中有一个 SearchView 它与 ContentProvider 连接以提供搜索建议 这些建议并非来自数据库 与通常的 ContentProvider 一样 而是来自 Web 服务 这就是为什么我必须异步处理
  • 如何在 IIS7 中使用 gzip 压缩?

    我已经为IIS7安装了静态和动态压缩 并设置了这两个web config我的应用程序的值Virtual Folder等级 据我了解 我不再需要在服务器或站点级别启用压缩 并且我可以使用 web config 文件按文件夹进行管理 我的里面有
  • JavaScript 数组:获取项目的“范围”

    是否有与 ruby 相当的东西array n m 在 JavaScript 中 例如 gt gt a a b c d e f g gt gt a 0 2 gt a b c Use the array slice begin end 功能 v
  • 另一个组件中的 MVC 6 RC2 控制器

    在 MVC 6 RC1 中我们使用了IAssemlbyProvider接口来注册在运行时发现的程序集并注入其他控制器类型 以类似的方式时尚到这篇文章 现在随着 RC2 的发布IAssemblyProvider已被删除并更改为 见参考资料 目
  • 为函数的参数分配默认值的困难

    在一个类中 我定义了一个私有常量 我尝试使用该常量作为函数参数的默认值 class Foo instance variable private let DefaultValue 10 Compiler error Cannot use in
  • 将android logcat数据写入文件

    每当用户想要收集日志时 我想将 Android logcat 转储到文件中 通过 adb 工具 我们可以使用以下命令将日志重定向到文件adb logcat f filename 但是我如何以编程方式执行此操作 这是一个example读取日志
  • Collections.defaultdict 与普通 dict 的区别

    我已经阅读了 python 文档中的示例 但仍然无法弄清楚这个方法的含义 有人可以帮忙吗 这是 python 文档中的两个示例 gt gt gt from collections import defaultdict gt gt gt s
  • 使用 Java 进行 ElasticSearch 聚合

    我想在我的 java 应用程序中进行聚合 首先 我使用curl 构建了REST 查询 它看起来像 curl XGET localhost 9200 analysis search pretty H Content Type applicat