Mik*_*ias 5 java performance inputstream stream elasticsearch
我有一个可以从Elasticsearch导出一些报告数据的休息应用程序.使用Java API很容易:
SearchResponse response = getClient()
.prepareSearch("my_index_name")
.setQuery(QueryBuilders.someQuery())
.addAggregation(AggregationBuilders.someAggregation())
.get();
Run Code Online (Sandbox Code Playgroud)
问题始于大反应.使用此代码片段,将读取响应以SearchResponse
在内存中构建对象.在我的情况下,响应不适合内存.
分页无法帮助,因为我们经常需要返回完整数据,而Aggregations 还不支持分页.
我知道我可以使用Elasticsearch REST API将响应作为流读取,但是手动构建请求会很麻烦.我真的想要这样的东西:
// my dream API
InputStream response = getClient()
.prepareSearch("my_index_name")
.setQuery(QueryBuilders.someQuery())
.addAggregation(AggregationBuilders.someAggregation())
.getStream();
Run Code Online (Sandbox Code Playgroud)
那么,Elasticsearch Java API流可以SearchResponse
吗?
我相信没有办法InputStream
从 Java API 获取 an(但我可能是错的)。我还认为没有办法直接获取InputStream
Jest (基于REST的Elasticsearch Java API)。
您提到自己创建对端点的搜索请求很麻烦_search
:如果您指的是构建实际的 json 查询,我只是想指出,一旦您有了SearchSourceBuilder
,您可以调用toString()
它来获取完整的您的查询的工作 json 表示形式。
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(this.getQuery())
.from(this.getFrom())
.size(this.getSize())
.fetchSource(this.getSource(), null);
this.getSort().forEach(sourceBuilder::sort);
sourceBuilder.toString() // the json representation
Run Code Online (Sandbox Code Playgroud)