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

标签 java api elasticsearch search

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

相关文章:

android - 如何检查 Google Play Services API 的可用性? (特别是 GCM API)

api - 用于矢量化数值计算的最佳 Scala 集合类型

node.js - 从非 AWS node.js 应用程序连接到 AWS Elasticsearch

java - 无法在 android webview 中加载屏幕?

java - 解码 Google App Engine 上作为电子邮件收到的 Base64 图像

java - 如何检查是否在 Android 中使用了正确的 API 级别

elasticsearch - 聚合热门点击 ElasticSearch

elasticsearch - 只允许索引模板中的字段

java - 使用 JAVA (IOM Bridge) 将变量插入 SAS。我应该使用 CORBA stub 和 JDBC 还是有其他选择?

java - 如何为 hibernate 中的自动增量提供起始值