Elasticsearch java客户端api复合聚合

MortEzATM

我想使用 ES java 客户端实现这个 json 查询:

{
    "query": {
        "bool": {
            "must_not": [
                {
                    "terms": {
                        "is_reversed": [
                            1,
                            2
                        ]
                    }
                }
            ],
        }
    },
    "aggs": {
        "my_buckets": {
            "composite": {
                "sources": [
                    {
                        "myfield_id": {
                            "terms": {
                                "field": "myfield_id",
                                "missing_bucket": true
                            }
                        }
                    }
                ],
                "size": 65535
            },
            "aggregations": {
                "sum": {
                    "sum": {
                        "field": "amount"
                    }
                }
            }
        }
    }
}

我使用新的 elasticsearch-java v8.2 api。它有一些文档和示例。

这是我的代码:

Query byReveredTransactionType = TermQuery.of(t ->
                t.field("is_reversed")
                        .value(1))._toQuery();

Map<String, CompositeAggregationSource> sources = Map.of("category_id", CompositeAggregationSource.of(b -> b
                .terms(t -> t.field("category_id")
                        .missingBucket(true))));

SearchRequest req = SearchRequest.of(r -> r
                        .query(q -> q
                                .bool(b -> b.mustNot(byReveredTransactionType))
                        )
                        .aggregations("my_buckets", AggregationBuilders.composite().sources(sources).build()._toAggregation())
                        .size(Short.MAX_VALUE * 2 - 1)
                        .build()._toAggregation()
        );

这是代码json输出:

{
  "aggregations": {
    "my_buckets": {
      "composite": {
        "sources": [
          {
            "myfield_id": {
              "terms": {
                "field": "myfield_id",
                "missing_bucket": true
              }
            }
          }
        ]
      }
    }
  },
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "is_reversed": {
              "value": 1
            }
          }
        }
      ]
    }
  },
  "size": 65533
}

我在is_reversed部分有问题。我也实现了复合聚合部分,但不能在my_buckets中组合它们。

谢谢!

萨加尔·帕特尔

您需要使用术语查询,下面是在 my_bucket 中添加聚合的方法:

List<FieldValue> values = new ArrayList<>();

values.add(FieldValue.of(1));
values.add(FieldValue.of(2));

Query byReveredTransactionType = TermsQuery.of(t -> t.field("is_reversed").terms(v -> v.value(values)))._toQuery();

Map<String, CompositeAggregationSource> cas = new HashMap<>();

cas.put("myfield_id",CompositeAggregationSource.of(c -> c.terms(t -> t.field("myfield_id").missingBucket(true))));

SearchRequest req = SearchRequest.of(r -> r.query(q -> q.bool(b -> b.mustNot(byReveredTransactionType))).aggregations("my_buckets", Aggregation.of(a -> a.composite(c -> c.sources(cas)).aggregations("sum",Aggregation.of(a2 -> a2.sum(s -> s.field("amount")))))));

StringWriter writer = new StringWriter();
JsonGenerator generator = JacksonJsonProvider.provider().createGenerator(writer);
req.serialize(generator, new JacksonJsonpMapper());
generator.flush();
System.out.println(writer.toString());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Elasticsearch Java客户端初始化失败

Elasticsearch REST客户端与Spring数据Elasticsearch

Elasticsearch 5 Java客户端给 “NoNodeAvailableException”

Elasticsearch使用Java客户端查找所有索引

使用Java API的Elasticsearch聚合

如何使用python Elasticsearch客户端upsert api

用于ElasticSearch的Java HTTP客户端

如何使用Java客户端查询ElasticSearch?

使用Java REST客户端API的Elasticsearch 6.5.4中的完成建议器

带参数的Elasticsearch Java HighLevel客户端更新脚本

ElasticSearch C#客户端(NEST):访问嵌套的聚合结果

Elasticsearch范围查询(PHP客户端)

有客户端/ ElasticSearch集群信息

如何在Elasticsearch php客户端api中通过Alias查找索引

5.3中的Elasticsearch客户端java.lang.ExceptionInInitializerError

基于okHttp的ElasticSearch Java客户端

无法解决错误:java.lang.NoSuchFieldError:FAIL_ON_SYMBOL_HASH_OVERFLOW- elasticsearch Java客户端api

ES 1.7.3 Elasticsearch Java客户端:重要术语聚合未知值

带参数的Elasticsearch Java客户端更新脚本

Groovy Elasticsearch客户端

带有嵌套聚合的Elasticsearch NEST客户端

使用elastic4s客户端为Elasticsearch构建动态聚合查询

ElasticSearch JS客户端搜索依据

如何使用Java传输客户端连接到ElasticSearch?

在Elasticsearch Java客户端中执行UpdateByQueryRequest

Elasticsearch NEST 客户端库

使用 Elasticsearch DSL Python 的复合 Elasticsearch 聚合

用于 Elasticsearch 的 .NET NEST 客户端

在 Elasticsearch 中搜索复合聚合