gpt4 book ai didi

java - 在 Elasticsearch 的一个查询中返回所有记录

转载 作者:搜寻专家 更新时间:2023-10-30 21:39:36 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com