我用的是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條
uj5u.com熱心網友回復:
每次取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++;
}
uj5u.com熱心網友回復:
樓主,怎么寫啊,現在有答案了嗎?我也碰到這個問題轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270090.html
標籤:Java EE
上一篇:求eclipse專案運行(有原始碼和資料庫和視頻教程)
下一篇:這兩個jdk環境有什么區別?
