是一個分頁查詢
/** * 查詢 * @param keyword * @param pageNo * @param pageSize * @return * @throws IOException */ public List<Map<String ,Object>> searchPage(String keyword, int pageNo, int pageSize) throws IOException { // 指定要查詢的索引 SearchRequest searchRequest = new SearchRequest("phone_info"); // 設置分頁條件 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); pageNo = pageNo == 0 ? 1 : pageNo; pageSize = pageSize == 0 ? 10 : pageSize; searchSourceBuilder.from(pageNo); searchSourceBuilder.size(pageSize); // 輸入的關鍵字匹配的字段 TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title.keyword", keyword); searchSourceBuilder.query(termQueryBuilder); searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); // 執行 searchRequest.source(searchSourceBuilder); SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); ArrayList<Map<String,Object>> list = new ArrayList<>(); if (search.getHits().getHits().length!=0){ for (SearchHit documentFields : search.getHits().getHits()) { list.add(documentFields.getSourceAsMap()); } return list; }else { HashMap<String, Object> map = new HashMap<>(); map.put("code",404); map.put("msg","沒有相關數據"); list.add(map); return list; } } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
其實前面的都差不多,最大的不同的地方在QueryBuilders調用的方法。
termQuery(字段.keyword,"value"):單條件精確查詢。termsQuery(字段.keyword,"value1","value2","..."):多條件精確查詢,取並集。rangeQuery("字段").from("start").to("end");范圍查詢,查詢指定字段處於start到end范圍的值,閉區間(不包括start、end)。rangeQuery("字段").from("start", false).to("end", false);開區間范圍查詢。rangeQuery("字段").lt("value");小於value的值,小於等於是lte、大於是gt、大於等於是gte。- 組合多條件查詢,將上面的可以進行組合,使用:
must必須、mustNot必須不、should類似於or進行連接。 wildcardQuery("字段","*value*"):模糊查詢,支持通配符。queryStringQuery("value").field("字段");不使用通配符的模糊查詢,左右匹配。multiMatchQuery("字段","value1","value2"):多字段模糊查詢
