当前位置: 首页 > 知识库问答 >
问题:

使用 Java 以 csv 格式提取弹性搜索查询输出

子车新立
2023-03-14

我用java查询弹性搜索我想把我的查询数据导出到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);
    }
}

查询的输出是这样的

"桶":[{"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个答案

令狐阳秋
2023-03-14

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

您可以像这样使用这个轻量级工具

# 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 lib或任何适合您的在线工具将json转换成csv。

 类似资料:
  • 我正在LDAP服务器上工作。它有弹性搜索。我必须用一些Javascript代码(JSON格式)发送查询。 这是我的查询: 我试图打印所有结果,其中“server”=“server\u name”(该字段是server:server\u name…)。我认为关于弹性搜索的文档太小了。我找到了一些文档,但都是一样的,对新用户没有帮助。这个例子太简单了。 此查询返回所有结果,包括任何筛选器。 Ps:这就

  • 我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢

  • 我需要在elasticsearch中编写搜索查询,数据如下 场景:-用户想要搜索与p2相关的人,并使用每个相关的人找到他们与谁相关 1.首先找到与p2答案=p1相关的人。现在找到与p1答案=p3相关的人。(目前的要求是只进行1级),因此不需要找到与p3相关的人。最终结果应该是p2,p1,p3。 正常场景的我们将编写一个嵌套sql来获得结果。我们如何使用弹性查询语言一次性实现这一点

  • 我在术语查询中要求弹性搜索中的嵌套字段,其中嵌套字段值应与术语查询中提供的值的数量完全匹配。例如,考虑下面的查询,在这里我们对名为类型的嵌套字段进行查询。 GET资产/_search 索引映射 样本文件: 上述查询应返回字段类型正好有2个值的文档,即“VOD”

  • 我正在开发JSF项目并将Elastic Search与本机JavaApi(不是Jest)一起使用。我在elasticsearch索引映射中为高级全文搜索定义了分析器和nGram过滤器。如何使用java api进行此查询定义?

  • 我刚加入弹性搜索公司。而不知道如何在JSON请求中对索引和an类型发出正确的请求?(所以我不想像localhost:9200/myindex/mytype/_search那样在URL中使用索引和类型,而是向localhost:9200/_search发出JSON请求) 我试过这样的东西。但我得到的结果是'AAA'索引而不是'BBB'索引。如何只从bbb索引得到结果或者根本没有结果?