我在 Elasticsearch 中有一个数据库,想获取我网站页面上的所有记录。我写了一个 bean,它连接到 Elasticsearch 节点,搜索记录并返回一些响应。我执行搜索的简单 Java 代码是
SearchResponse response = getClient().prepareSearch(indexName)
.setTypes(typeName)
.setQuery(queryString("\*:*"))
.setExplain(true)
.execute().actionGet();
但是 Elasticsearch 将默认大小设置为 10,我得到了 10 次响应。我的数据库中有超过 10 条记录。如果我将大小设置为 Integer.MAX_VALUE
,我的搜索会变得很慢,这不是我想要的。
如何在不设置响应大小的情况下在可接受的时间内通过一个操作获取所有记录?
最佳答案
public List<Map<String, Object>> getAllDocs(){
int scrollSize = 1000;
List<Map<String,Object>> esData = new ArrayList<Map<String,Object>>();
SearchResponse response = null;
int i = 0;
while( response == null || response.getHits().hits().length != 0){
response = client.prepareSearch(indexName)
.setTypes(typeName)
.setQuery(QueryBuilders.matchAllQuery())
.setSize(scrollSize)
.setFrom(i * scrollSize)
.execute()
.actionGet();
for(SearchHit hit : response.getHits()){
esData.add(hit.getSource());
}
i++;
}
return esData;
}
关于java - 在 Elasticsearch 的一个查询中返回所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15114481/