使用Java API从Elasticsearch获取所有记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Java API从Elasticsearch获取所有记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2101字,纯文字阅读大概需要4分钟。
内容图文
![使用Java API从Elasticsearch获取所有记录](/upload/InfoBanner/zyjiaocheng/819/7ccc2e7b264143968500536378bee2f2.jpg)
我试图使用Java API从Elasticsearch获取所有记录.但我收到以下错误
n[[Wild Thing][localhost:9300][indices:data/read/search[phase/dfs]]];
nested: QueryPhaseExecutionException[Result window is too large, from
+ size must be less than or equal to: [10000] but was [10101].
我的代码如下
Client client;
try {
client = TransportClient.builder().build().
addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
int from = 1;
int to = 100;
while (from <= 131881) {
SearchResponse response = client
.prepareSearch("demo_risk_data")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setFrom(from)
.setQuery(QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("user_agent", "")))
.setSize(to).setExplain(true).execute().actionGet();
if (response.getHits().getHits().length > 0) {
for (SearchHit searchData : response.getHits().getHits()) {
JSONObject value = new JSONObject(searchData.getSource());
System.out.println(value.toString());
}
}
}
}
当前存在的记录总数为131881,所以我从= 1开始到= 100然后从< = 131881开始获得100条记录.有没有办法我可以检查得到100的记录,直到有Elasticsearch中没有其他记录.
解决方法:
是的,您可以使用Java客户端also supports的scroll API来完成.
你可以这样做:
Client client;
try {
client = TransportClient.builder().build().
addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
QueryBuilder qb = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("user_agent", ""));
SearchResponse scrollResp = client.prepareSearch("demo_risk_data")
.addSort(SortParseElement.DOC_FIELD_NAME, SortOrder.ASC)
.setScroll(new TimeValue(60000))
.setQuery(qb)
.setSize(100).execute().actionGet();
//Scroll until no hits are returned
while (true) {
//Break condition: No hits are returned
if (scrollResp.getHits().getHits().length == 0) {
break;
}
// otherwise read results
for (SearchHit hit : scrollResp.getHits().getHits()) {
JSONObject value = new JSONObject(searchData.getSource());
System.out.println(value.toString());
}
// prepare next query
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
}
}
内容总结
以上是互联网集市为您收集整理的使用Java API从Elasticsearch获取所有记录全部内容,希望文章能够帮你解决使用Java API从Elasticsearch获取所有记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。