es查询

 

 

 

  @Override
    public PageVO<ProjectDTO> queryProjectIndex(ProjectQueryParamsDTO projectQueryParamsDTO, Integer pageNo, Integer pageSize, String sortBy, String order) {

        //1.创建搜索请求对象
        SearchRequest searchRequest = new SearchRequest(projectIndex);

        //2.搜索条件
        //2.1 创建条件封装对象
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        //2.2 非空判断并封装条件
        if (StringUtils.isNotBlank(projectQueryParamsDTO.getName())) {
            queryBuilder.must(QueryBuilders.termQuery("name", projectQueryParamsDTO.getName()));
        }
        if (projectQueryParamsDTO.getStartPeriod() != null) {
            queryBuilder.must(QueryBuilders.rangeQuery("period").gte(projectQueryParamsDTO.getStartPeriod()));
        }
        if (projectQueryParamsDTO.getEndPeriod() != null) {
            queryBuilder.must(QueryBuilders.rangeQuery("period").lte(projectQueryParamsDTO.getEndPeriod()));
        }

        //3.创建SearchSourceBuilder对象---总的封装对象
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //3.1 封装条件
        searchSourceBuilder.query(queryBuilder);
        //3.2 设置排序参数
        if (StringUtils.isNotBlank(sortBy) && StringUtils.isNotBlank(order)) {
            if (order.toLowerCase().equals("asc")) {
                searchSourceBuilder.sort(sortBy, SortOrder.ASC);
            }
            if (order.toLowerCase().equals("desc")) {
                searchSourceBuilder.sort(sortBy, SortOrder.DESC);
            }
        } else {
            searchSourceBuilder.sort("createdate", SortOrder.DESC);
        }

        //3.2 设置分页参数
        searchSourceBuilder.from((pageNo - 1) * pageSize);
        searchSourceBuilder.size(pageSize);

        //4.完成封装
        searchRequest.source(searchSourceBuilder);

        //5.执行搜索
        List<ProjectDTO> list = new ArrayList<>();
        PageVO<ProjectDTO> pageVO = new PageVO<>();
        try {
            SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
            //6.获取响应结果
            SearchHits hits = searchResponse.getHits();
            long totalHits = hits.getTotalHits().value;//匹配的总记录数
            pageVO.setTotal(totalHits);
            SearchHit[] searchHits = hits.getHits();//获取匹配数据
            //7.循环封装DTO
            for (SearchHit hit : searchHits) {
                ProjectDTO projectDTO = new ProjectDTO();
                Map<String, Object> sourceAsMap = hit.getSourceAsMap();
                Double amount = (Double) sourceAsMap.get("amount");
                String projectstatus = (String) sourceAsMap.get("projectstatus");
                Integer period = Integer.parseInt(sourceAsMap.get("period").toString());
                String name = (String) sourceAsMap.get("name");
                String description = (String) sourceAsMap.get("description");
                BigDecimal annualRate = new BigDecimal(sourceAsMap.get("annualrate").toString());
                projectDTO.setAmount(new BigDecimal(amount));
                projectDTO.setProjectStatus(projectstatus);
                projectDTO.setPeriod(period);
                projectDTO.setName(name);
                projectDTO.setDescription(description);
                projectDTO.setAnnualRate(annualRate);
                projectDTO.setId(Long.parseLong(sourceAsMap.get("id").toString()));
                list.add(projectDTO);
            }
        } catch (Exception e) {
            return null;
        }
        //8.封装为PageVO对象并返回
        pageVO.setContent(list);
        pageVO.setPageSize(pageSize);
        pageVO.setPageNo(pageNo);
        return pageVO;

    }

 

posted @ 2023-07-17 00:18  lamda表达式先驱  阅读(82)  评论(0)    收藏  举报