Spring data elasticsearch 3.1 大数据集访问手册外更新

错误提示

elasticsearch result window is too large from + size must be less than or equal to 10000

原因

Elasticsearch 默认返回集在10000条以内。

解决办法

如果需要更多的返回值,有2种办法:

  • 调整max_result_window, 好处是沿用现有的访问方式 , repository 和pageable都正常使用,弊端是其实不是官方推荐的方式,会影响速度,带来过大内存消耗。

curl -XPUT "http://localhost:9200/my_index/_settings" -d '{ "index" : { "max_result_window" : 500000 } }'

  • 采用 Scan And Scroll For Big Result Set 英文手册原文
重点是Spring的手册并没有更新,只是代码更新了,3.1里面提到的方法elasticsearchTemplate.scan(searchQuery,1000,false) API里面根本不支持。

为此,我从github的测试代码中翻出了这宝贵的调用例子,成功调通,在这奉献给大家。

CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria());
        criteriaQuery.addIndices(INDEX_NAME);
        criteriaQuery.addTypes(TYPE_NAME);
        criteriaQuery.setPageable(new PageRequest(0, 10));

        ScrolledPage scroll = (ScrolledPage) elasticsearchTemplate.startScroll( 1000, criteriaQuery, SampleEntity.class);
        List sampleEntities = new ArrayList<>();
        while (scroll.hasContent()) {
            sampleEntities.addAll(scroll.getContent());
            scroll = (ScrolledPage) elasticsearchTemplate.continueScroll(scroll.getScrollId() , 1000, SampleEntity.class);
        }
elasticsearchTemplate.clearScroll(scroll.getScrollId());

附上源码出处

你可能感兴趣的:(Spring data elasticsearch 3.1 大数据集访问手册外更新)