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;
        }
    }
}

其实前面的都差不多,最大的不同的地方在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"):多字段模糊查询
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值