RestHighLevelClient查询ElasticSearch

是一个分页查询

    /**
     * 查询
     * @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调用的方法。

  1. termQuery(字段.keyword,"value"):单条件精确查询。
  2. termsQuery(字段.keyword,"value1","value2","..."):多条件精确查询,取并集。
  3. rangeQuery("字段").from("start").to("end"); 范围查询,查询指定字段处于start到end范围的值,闭区间(不包括start、end)。
  4. rangeQuery("字段").from("start", false).to("end", false); 开区间范围查询。
  5. rangeQuery("字段").lt("value"); 小于value的值,小于等于是lte、大于是gt、大于等于是gte
  6. 组合多条件查询,将上面的可以进行组合,使用:must必须、mustNot必须不、should类似于or进行连接。
  7. wildcardQuery("字段","*value*"):模糊查询,支持通配符。
  8. queryStringQuery("value").field("字段");不使用通配符的模糊查询,左右匹配。
  9. multiMatchQuery("字段","value1","value2"):多字段模糊查询
posted @ 2021-01-28 10:22  SUPERUSR  阅读(1571)  评论(0编辑  收藏  举报