我用的是RestHighLevelClient方法连接es,我查询的部分核心代码
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 查询条件
// 创建BoolQueryBuilder对象
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); // 匹配索引下的所有字段分词查询
QueryStringQueryBuilder queryBuilder = QueryBuilders
.queryStringQuery(inputValue.getValue());
// 配置hanlp分词器
queryBuilder.analyzer("hanlp-index"); queryBuilder.useDisMax(true); // 子boolQueryBuilder条件条件,用来表示查询条件or的关系
BoolQueryBuilder childBoolQueryBuilder = new BoolQueryBuilder()
.should(queryBuilder);
// 添加查询条件到boolQueryBuilder中
boolQueryBuilder.must(childBoolQueryBuilder); sourceBuilder.query(boolQueryBuilder);
// 每页多少条数据
sourceBuilder.size(10000);
// 加入高亮显示
// sourceBuilder.highlighter(highlightBuilder); // 将请求体加入到请求中
searchRequest.source(sourceBuilder);

//设置超时时间
searchRequest.scroll(TimeValue.timeValueMinutes(1L)); // 3、发送请求
SearchResponse searchResponse; searchResponse = esc.client.search(searchRequest);
// System.out.println(searchResponse.toString());

// 处理搜索命中文档结果
SearchHits hits = searchResponse.getHits();

// 检索命中数
long totalHits = hits.getTotalHits();
float maxScore = hits.getMaxScore();

//获取scrollID
String scrollId = searchResponse.getScrollId();
System.out.println("scrollId--->"+scrollId);


SearchHit[] searchHits = hits.getHits();

//获取数据匹配总数,
for (SearchHit hit : searchHits) {
// 取_source字段值
String sourceAsString = hit.getSourceAsString(); // 取成json串
//sourList.add(sourceAsString);
//sourList.add(scrollId);
}
我在这里已经获取了匹配数据的总数,我想每次拿20条,点击下一页是,在查询出后20条

解决方案 »

  1.   

    每次取20条hit吧,我的思路是循环取hitString,放到list里面,然后返回伪代码:            int limit=0;
                for (SearchHit hit:hits.getHits()) {
                    if(limit==page){
                        break;
                     }
                   String hitString = hit.getSourceAsString();
                   list.add(hitString);
                   // 在这里取索引1-20
                   limit++;            }