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

新手上路,请多包涵

我在弹性搜索中有一个数据库,想获取我网站页面上的所有记录。我写了一个 bean,它连接到弹性搜索节点,搜索记录并返回一些响应。我进行搜索的简单 Java 代码是

SearchResponse response = getClient().prepareSearch(indexName)
    .setTypes(typeName)
    .setQuery(queryString("\*:*"))
    .setExplain(true)
    .execute().actionGet();

但是 Elasticsearch 将默认大小设置为 10,我有 10 个响应作为响应。我的数据库中有超过 10 条记录。如果我将大小设置为 Integer.MAX_VALUE 我的搜索变得非常慢,这不是我想要的。

如何在不设置响应大小的情况下在可接受的时间内通过一次操作获取所有记录?

原文由 San4o 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 976
1 个回答
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;
}

原文由 Dinoop Nair 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏