用Java提取CSV格式的ElasticSearch查询输出

7bsow1i6  于 2022-10-06  发布在  Java
关注(0)|答案(1)|浏览(214)

我正在使用Java来查询Elasticearch;我想将查询的数据导出为CSV文件。我为这事伤透了脑筋..请问有没有人能帮我解一下这个代码?我会很感激的。

这是我用Java编写的查询代码

try {
        RangeQueryBuilder rangeQ = QueryBuilders
                .rangeQuery("@timestamp")
                .gte("1663632000000")
                .lte("1663804799000")
                .format("epoch_millis");

        TermsAggregationBuilder termsAggregation = AggregationBuilders
                .terms("term_by_client_id")
                .field("labels.client_id")
                .size(100000)
                .minDocCount(1);

        termsAggregation
                .subAggregation(
                        AggregationBuilders
                                .sum("sum_by")
                                .field("labels.row_count")
                );
        termsAggregation
                .subAggregation(
                        AggregationBuilders
                                .terms("term_By_job")
                                .field("labels.job_id")
                );

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("*itm*");

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(rangeQ);
        searchSourceBuilder.aggregation(termsAggregation);
       // searchSourceBuilder.size(100000);
        searchRequest.source(searchSourceBuilder);

        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(searchResponse);

        Aggregations aggregations = searchResponse.getAggregations();
        Map<String, Aggregation> aggregationMap = aggregations.asMap();
        for (Map.Entry<String, Aggregation> each : aggregationMap.entrySet()){
            System.out.println((each.getValue()));
        }

    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

查询的输出如下所示

“Buckets”:[{“key”:“1741433”,“DOC_COUNT”:1},{“KEY”:“1741435”,“DOC_COUNT”:1},{“KEY”:“1741436”,“DOC_COUNT”:1},{“KEY”:“1741440”,“DOC_COUNT”:1},{“KEY”:“1741441”,“DOC_COUNT”:1},{“Key”:“1741442”,“DOC_COUNT”:1},{“key”:“1741443”,“DOC_COUNT”:1},{“KEY”:“1741444”,“DOC_COUNT”:1},{“KEY”:“1741450”,“DOC_COUNT”:1},{“KEY”:“1741451”,“DOC_COUNT”:1}]},“SUM#SUM_BY”:{“Value”:1.0951264E7}},{“KEY”:“86206”,“DOC_COUNT”:383,“sterms#term_By_job”:{“doc_count_error_upper_bound”:6,“SUM_OTHER_DOC_COUNT”:361,“存储桶”:[{“KEY”:“1211310”,“DOC_COUNT”:3},{“KEY”:“1211316”,“DOC_COUNT”:3},{“KEY”:“1210943”,“DOC_COUNT”:2},{“Key”:“1210945”,“DOC_COUNT”:2},{“key”:“1210946”,“DOC_COUNT”:2},{“KEY”:“1210947”,“DOC_COUNT”:2},{“KEY”:“1210948”,“DOC_COUNT”:2},{“KEY”:“1210949”,“DOC_COUNT”:2},{“KEY”:“1210987”,“DOC_COUNT”:2},{“KEY”:“1211010”,“DOC_COUNT”:2}]}

请帮助我在这里与这个代码,将不胜感激。谢谢。

pinkon5k

pinkon5k1#

这不完全是你想要的,但我认为它可能会对你有帮助,所以我建议你这样做。

您可以像这样使用这个lightweight tool


# Backup the results of a query to a file

elasticdump 
  --input=http://production.es.com:9200/my_index 
  --output=query.json 
  --searchBody="{"query":{"term":{"username": "admin"}}}"

然后使用Java库或任何适合您的在线工具将json转换为CSV。

相关问题