是一個分頁查詢
/** * 查詢 * @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")
:多字段模糊查詢