匹配所有查询未返回所有文档。

6
我想读取我的es索引中的所有文档。因此,我使用以下函数进行操作:
public List<Map<String, Object>> getAllDocs(){
        System.out.println(indexName+typeName);
        SearchResponse response = client.prepareSearch(indexName)
                .setTypes(typeName)
                .setQuery(QueryBuilders.matchAllQuery())
                .execute()
                .actionGet();

        for(SearchHit hit : response.getHits()){
            //System.out.println("id:"+hit.getId()+" row:"+hit.getSource());
            esData.add(hit.getSource());
        }
        return esData;
    }

但是这个函数只返回10个文档。如果我添加一个参数 .setSize(100),那么它将返回100个文档。如何在不使用 .setSize(100) 参数的情况下获取索引中的所有文档?

1个回答

8
这并不是一个有效的方法,因为这可能会导致实际性能问题。如果您需要所有记录,有至少两种方法可以做到这一点:
使用分页:指定大小和来源。
使用滚动API: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-scroll.html 另一种方法可能是设置更大的大小,首先执行计数查询以获取所有项目的计数,然后将大小设置为此值。但我绝不会在生产中使用这种解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接