java - elasticsearch使用resthighlevel客户端生成查询

标签 java elasticsearch elasticsearch-aggregation elasticsearch-dsl resthighlevelclient

我必须使用其余高级客户端生成以下查询,并且尝试了以下查询,但无法形成查询,如下所示,我想知道当前汇总代码中出了错的地方,热门匹配应该出现在汇总之前而且我正在使用其余高级客户端连接到 flex 搜索。

必填查询:

{
    "aggregations": {
        "by_destination": {
            "terms": {
                "field": "destinationLocation.keyword",
                "size": 10,
                "min_doc_count": 1,
                "shard_min_doc_count": 0,
                "show_term_doc_count_error": false,
                "order": [
                    {
                        "_count": "desc"
                    },
                    {
                        "_key": "asc"
                    }
                ]
            },
            "aggregations": {
                "by_trans": {
                    "terms": {
                        "field": "transportMode.keyword",
                        "size": 10,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    },
                    "aggregations": {
                        "by_sourcelocation": {
                            "terms": {
                                "field": "sourceLocation.keyword",
                                "size": 10,
                                "min_doc_count": 1,
                                "shard_min_doc_count": 0,
                                "show_term_doc_count_error": false,
                                "order": [
                                    {
                                        "_count": "desc"
                                    },
                                    {
                                        "_key": "asc"
                                    }
                                ]
                            },
                            "aggregations": {
                                "by_shipdate": {
                                    "terms": {
                                        "field": "shipDate",
                                        "size": 10,
                                        "min_doc_count": 1,
                                        "shard_min_doc_count": 0,
                                        "show_term_doc_count_error": false,
                                        "order": [
                                            {
                                                "_count": "desc"
                                            },
                                            {
                                                "_key": "asc"
                                            }
                                        ]
                                    },
                                    "aggregations": {
                                        "by_arrival": {
                                            "terms": {
                                                "field": "arrivalDate",
                                                "size": 10,
                                                "min_doc_count": 1,
                                                "shard_min_doc_count": 0,
                                                "show_term_doc_count_error": false,
                                                "order": [
                                                    {
                                                        "_count": "desc"
                                                    },
                                                    {
                                                        "_key": "asc"
                                                    }
                                                ]
                                            },
                                            "aggregations": {
                                                "docs": {
                                                    "top_hits": {
                                                        "size": 10,
                                                        "_source": [
                                                            "id"
                                                        ]
                                                    }
                                                },
                                                "quantity": {
                                                    "sum": {
                                                        "field": "transferQuantity"
                                                    }
                                                },
                                                "transfercost": {
                                                    "sum": {
                                                        "field": "transferCost"
                                                    }
                                                },
                                                "revenueRecovered": {
                                                    "sum": {
                                                        "field": "revenueRecovered"
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

编码:

TopHitsAggregationBuilder topHitsAggregationBuilder = AggregationBuilders.topHits("top").fetchSource("id", "").size(1);

    AggregationBuilder itemAgg = AggregationBuilders.terms("by_item").field("item.keyword");

    AggregationBuilder destinationAgg = AggregationBuilders.terms("by_destination").field("destinationLocation.keyword");

    AggregationBuilder transportAgg = AggregationBuilders.terms("by_trans").field("transportMode.keyword");

    AggregationBuilder sourceAgg = AggregationBuilders.terms("by_sourcelocation").field("sourceLocation.keyword");

    AggregationBuilder shipDateAgg = AggregationBuilders.terms("by_shipdate").field("shipDate");

    AggregationBuilder arrivalDateAgg = AggregationBuilders.terms("by_arrival").field("arrivalDate");

    AggregationBuilder quantityAgg = AggregationBuilders.sum("quantity").field("transferQuantity");
    AggregationBuilder transferCostAgg = AggregationBuilders.sum("transfercost").field("transferCost");
    AggregationBuilder revenueRecoveredAgg = AggregationBuilders.sum("revenueRecovered").field("revenueRecovered");


    AggregationBuilder aggregation = itemAgg.subAggregation(destinationAgg
            .subAggregation(transportAgg.subAggregation(sourceAgg.subAggregation(shipDateAgg.subAggregation(arrivalDateAgg)
                    .subAggregation(topHitsAggregationBuilder).subAggregation(quantityAgg)
                    .subAggregation(transferCostAgg).subAggregation(revenueRecoveredAgg)))));

    //searchSourceBuilder.size(0);
    searchSourceBuilder.aggregation(aggregation);
    searchRequest.source(searchSourceBuilder);

实际产生的是:
 {
    "aggregations": {
        "by_item": {
            "terms": {
                "field": "item.keyword",
                "size": 10,
                "min_doc_count": 1,
                "shard_min_doc_count": 0,
                "show_term_doc_count_error": false,
                "order": [
                    {
                        "_count": "desc"
                    },
                    {
                        "_key": "asc"
                    }
                ]
            },
            "aggregations": {
                "by_destination": {
                    "terms": {
                        "field": "destinationLocation.keyword",
                        "size": 10,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    },
                    "aggregations": {
                        "by_trans": {
                            "terms": {
                                "field": "transportMode.keyword",
                                "size": 10,
                                "min_doc_count": 1,
                                "shard_min_doc_count": 0,
                                "show_term_doc_count_error": false,
                                "order": [
                                    {
                                        "_count": "desc"
                                    },
                                    {
                                        "_key": "asc"
                                    }
                                ]
                            },
                            "aggregations": {
                                "by_sourcelocation": {
                                    "terms": {
                                        "field": "sourceLocation.keyword",
                                        "size": 10,
                                        "min_doc_count": 1,
                                        "shard_min_doc_count": 0,
                                        "show_term_doc_count_error": false,
                                        "order": [
                                            {
                                                "_count": "desc"
                                            },
                                            {
                                                "_key": "asc"
                                            }
                                        ]
                                    },
                                    "aggregations": {
                                        "by_shipdate": {
                                            "terms": {
                                                "field": "shipDate",
                                                "size": 10,
                                                "min_doc_count": 1,
                                                "shard_min_doc_count": 0,
                                                "show_term_doc_count_error": false,
                                                "order": [
                                                    {
                                                        "_count": "desc"
                                                    },
                                                    {
                                                        "_key": "asc"
                                                    }
                                                ]
                                            },
                                            "aggregations": {
                                                "by_arrival": {
                                                    "terms": {
                                                        "field": "arrivalDate",
                                                        "size": 10,
                                                        "min_doc_count": 1,
                                                        "shard_min_doc_count": 0,
                                                        "show_term_doc_count_error": false,
                                                        "order": [
                                                            {
                                                                "_count": "desc"
                                                            },
                                                            {
                                                                "_key": "asc"
                                                            }
                                                        ]
                                                    }
                                                },
                                                "top": {
                                                    "top_hits": {
                                                        "from": 0,
                                                        "size": 1,
                                                        "version": false,
                                                        "explain": false,
                                                        "_source": {
                                                            "includes": [
                                                                "id"
                                                            ],
                                                            "excludes": [
                                                                ""
                                                            ]
                                                        }
                                                    }
                                                },
                                                "quantity": {
                                                    "sum": {
                                                        "field": "transferQuantity"
                                                    }
                                                },
                                                "transfercost": {
                                                    "sum": {
                                                        "field": "transferCost"
                                                    }
                                                },
                                                "revenueRecovered": {
                                                    "sum": {
                                                        "field": "revenueRecovered"
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

最佳答案

Top_hits聚合不接受子聚合。所以解决办法就是改变
下面的查询

.subAggregation(topHitsAggregationBuilder.subAggregation(quantityAgg) 


.subAggregation(topHitsAggregationBuilder).subAggregation(quantityAgg) 

关于java - elasticsearch使用resthighlevel客户端生成查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61798303/

相关文章:

java - IDEA 显示正在使用的方法,未使用时

docker - 如果使用docker安装了 Elasticsearch 和kibana,如何创建ES集群并存储数据

elasticsearch - 来自 Kibana 4 可视化的 ES 查询?

performance - 当我只想要前10个存储桶时,是否可以使Elasticsearch聚合更快?

elasticsearch - Elasticsearch 聚合查询抛出异常

java - 在LWJGL中变换硬件光标

java - 在 REST 服务器的 SecurityContext 中找不到身份验证对象

java - 使用 apache commons 配置的应用程序

elasticsearch - Elasticsearch分片重定位查询-是分片重定位(数据传输)过程中涉及的主节点

elasticsearch - Elasticsearch 聚合存储桶保持为空