Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中生成弹性搜索嵌套聚合?_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Elastic Stack_Resthighlevelclient - Fatal编程技术网 elasticsearch,elastic-stack,resthighlevelclient,Java,elasticsearch,Elastic Stack,Resthighlevelclient" /> elasticsearch,elastic-stack,resthighlevelclient,Java,elasticsearch,Elastic Stack,Resthighlevelclient" />

如何在java中生成弹性搜索嵌套聚合?

如何在java中生成弹性搜索嵌套聚合?,java,elasticsearch,elastic-stack,resthighlevelclient,Java,elasticsearch,Elastic Stack,Resthighlevelclient,我需要将下面的聚合查询转换为java 下面的聚合查询需要使用弹性搜索客户端RestHighLevelCleint转换为java 不确定我尝试了多次,但是java代码无法按照下面的查询进行翻译 { "aggs": { "recommendations": { "nested": { "path": "events.recommendationData" }, "aggs": { "exception": {

我需要将下面的聚合查询转换为java

下面的聚合查询需要使用弹性搜索客户端RestHighLevelCleint转换为java 不确定我尝试了多次,但是java代码无法按照下面的查询进行翻译

{
  "aggs": {
    "recommendations": {
      "nested": {
        "path": "events.recommendationData"
      },
      "aggs": {
        "exception": {
          "filter": {
            "terms": {
              "events.recommendationData.exceptionId": [
                "2"
              ]
            }
          },
          "aggs": {
            "exceptionIds": {
              "terms": {
                "field": "events.recommendationData.exceptionId.keyword",
                "size": 10
              },
              "aggs": {
                "recommendations": {
                  "nested": {
                    "path": "events.recommendationData.recommendations"
                  },
                  "aggs": {
                    "recommendationType": {
                      "terms": {
                        "field": "events.recommendationData.recommendations.recommendationType",
                        "size": 10
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
在RestHighLevelClient中使用以下代码

AggregationBuilder recommendations =
                AggregationBuilders.nested("recommendations", "events.recommendationData");

        AggregationBuilder exception = AggregationBuilders
                    .filter("exception", QueryBuilders.termsQuery("events.recommendationData.exceptionId", "2"));

        AggregationBuilder exceptionIds = AggregationBuilders.terms("exceptionIds")
                .field("events.recommendationData.exceptionId.keyword").size(10);

        AggregationBuilder recommendations2 =
                AggregationBuilders.nested("recommendations", "events.recommendationData.recommendations");

        AggregationBuilder recommendationType = AggregationBuilders.terms("recommendationType")
                .field("events.recommendationData.recommendations.recommendationType").size(10);

        AggregationBuilder build = 
                recommendations
                        .subAggregation(exception)
                        .subAggregation(exceptionIds)
                        .subAggregation(recommendations2)
                        .subAggregation(recommendationType);
它产生了错误的查询,正如我在下面发布的,它不起作用

{
  "aggregations": {
    "recommendations": {
      "nested": {
        "path": "events.recommendationData"
      },
      "aggregations": {
        "exception": {
          "filter": {
            "terms": {
              "events.recommendationData.exceptionId": [
                "1",
                "2"
              ],
              "boost": 1
            }
          }
        },
        "exceptionIds": {
          "terms": {
            "field": "events.recommendationData.exceptionId.keyword",
            "size": 10,
            "min_doc_count": 1,
            "shard_min_doc_count": 0,
            "show_term_doc_count_error": false,
            "order": [
              {
                "_count": "desc"
              },
              {
                "_key": "asc"
              }
            ]
          }
        },
        "recommendations": {
          "nested": {
            "path": "events.recommendationData.recommendations"
          }
        },
        "recommendationType": {
          "terms": {
            "field": "events.recommendationData.recommendations.recommendationType",
            "size": 10,
            "min_doc_count": 1,
            "shard_min_doc_count": 0,
            "show_term_doc_count_error": false,
            "order": [
              {
                "_count": "desc"
              },
              {
                "_key": "asc"
              }
            ]
          }
        }
      }
    }
  }
}

预期:每个聚合都是前一个聚合的子聚合

因此,如果您看到预期的查询,recommendationType是recommendations2的子聚合。它们一起是异常ID的子聚合,等等。因此,这里只需要更改一行,而不是

 AggregationBuilder build = 
                recommendations
                        .subAggregation(exception)
                        .subAggregation(exceptionIds)
                        .subAggregation(recommendations2)
                        .subAggregation(recommendationType);
用这个,

recommendations.subAggregation(
        exception.subAggregation(
            exceptionIds.subAggregation(
                recommendations2.subAggregation(recommendationType)
            )
        )
    );