elasticsearch判断参数是否为空,执行多条件查询,并分页

这次使用elasticsearch 需要判断前端是否传了参数,如果传了就添加这个查询条件,没传的话,就不要这个查询条件,获得查询结果并分页
代码如下

 public IMoocJSONResult searchComp(String ulanguage,String ucompname, String utype, String uareaid,Integer pageNo, Integer pageSize){
        // 构建查询条件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        BoolQueryBuilder boolQueryBuilder = boolQuery();
        if (null != ulanguage) {
            boolQueryBuilder.must(termQuery("ulanguage", ulanguage));
        }
        if (null != ucompname) {
            boolQueryBuilder.must(matchQuery("ucompname", ucompname));
        }
        if (null != utype) {
            boolQueryBuilder.must(termQuery("utype", utype));
        }
        if (null != uareaid) {
            boolQueryBuilder.must(termQuery("uareaid", uareaid));
        }

        queryBuilder.withQuery(boolQueryBuilder).build();
        if(pageNo ==null){
            pageNo=DEFAULT_PAGE;
        }
        if(pageSize==null){
            pageSize=DEFAULT_SIZE;
        }
        // 设置分页参数
        queryBuilder.withPageable(PageRequest.of(pageNo-1,pageSize));
        Page<Comp> list = this.compRepository.search(queryBuilder.build());
        PagedResult pagedResult = new PagedResult();
        pagedResult.setPage(list.getNumber());// 当前页数
        pagedResult.setTotal(list.getTotalPages());// 总页数
        // pagedResult.setRows(list);// 数据内容
        pagedResult.setContents(list);// 数据内容
        pagedResult.setRecords(list.getTotalElements());// 总条数
        return IMoocJSONResult.ok(pagedResult);
    }

这样就可以执行成功了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
执行一个分页查询时,Elasticsearch执行过程通常涉及以下步骤: 1. 查询解析:首先,Elasticsearch 解析查询请求,包括解析查询语句、过滤条件、排序规则以及分页参数等。它会根据查询的内容构建一个查询对象。 2. 查询路由:根据查询的索引和路由信息,Elasticsearch 确定哪些分片(shard)需要参与查询操作。如果指定了特定的路由值,它会将查询路由到对应的分片上。 3. 分片搜索:Elasticsearch 在每个相关的分片上执行搜索操作。它将查询对象发送给每个分片,并在分片上执行相应的查询操作。 4. 结果合并:每个分片独立地返回与查询匹配的文档列表和相关的打分信息。这些结果会经过协调节点(coordinating node)进行合并和排序,以生成全局的搜索结果列表。 5. 分页处理:在合并和排序后,Elasticsearch 根据指定的分页参数(页码、每页大小)截取所需的结果片段。它会跳过前面的文档,只返回当前页所需的文档数量。 6. 结果返回:最后,Elasticsearch 将分页后的结果返回给客户端,以满足查询请求。客户端可以根据返回的结果进行处理,如展示、分析或进一步处理。 需要注意的是,Elasticsearch 的分页是基于深度分页(deep pagination)的,这意味着在高页码的情况下,性能可能会受到影响。为了避免深度分页带来的性能问题,可以使用游标(scroll)或搜索后的滚动(search after)等技术来处理大量数据的分页查询。这些技术可以通过保持搜索上下文来提高性能,并减少重复的开销。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值