栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

最新elasticsearch7.16 javaapi复杂查询实例

最新elasticsearch7.16 javaapi复杂查询实例

 @Override
    public IPage healthManagerSearchByEs(PageParams healthManagerSearchVO) throws IOException {
        SearchRequest searchRequest = new SearchRequest(TenantConstants.DOCTOR);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // 分页
        searchSourceBuilder.from((int) healthManagerSearchVO.getCurrent() - 1);
        searchSourceBuilder.size((int) healthManagerSearchVO.getSize());
		// 过滤返回的字段
        String[] fields = {"id", "doctorName", "avatar", "title", "workUnit",
                "department", "isEnable", "approvalStatus", "doctorType", "genius", "describe", "isOnline", "createTime"};
        searchSourceBuilder.fetchSource(fields, null);
        // 排序
        searchSourceBuilder.sort(new FieldSortBuilder("createTime").order(SortOrder.DESC));
        String keyword = healthManagerSearchVO.getModel().getKeyword();
        // 组合查询 must相当于sql中的and
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.matchQuery("isOnline", true))
                .must(QueryBuilders.matchQuery("isEnable", true))
                .must(QueryBuilders.matchQuery("approvalStatus", DoctorApprovalStatus.PASS));
        if (StrUtil.isNotBlank(keyword)) {
              // 多字段查询 multiMatchQuery
            boolQueryBuilder.must(QueryBuilders.multiMatchQuery(keyword, "doctorName", "genius"));
        }
        searchSourceBuilder.query(boolQueryBuilder);
        searchRequest.source(searchSourceBuilder);
        SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
		// 封装返参
        IPage page = new Page<>();
        page.setCurrent(healthManagerSearchVO.getCurrent());
        page.setSize(healthManagerSearchVO.getSize());
        page.setTotal(response.getHits().getHits().length);
        page.setPages((response.getHits().getHits().length + healthManagerSearchVO.getSize() - 1)
                / healthManagerSearchVO.getSize());
        List records = new ArrayList<>();
        for (SearchHit hit : response.getHits().getHits()) {
            Map sourceAsMap = hit.getSourceAsMap();
            DoctorSearchResponseDTO doctorSearchResponseDTO = new DoctorSearchResponseDTO();
            DoctorSearchResponseDTO newDTO = BeanUtil.fillBeanWithMap(sourceAsMap, doctorSearchResponseDTO, false);
            records.add(newDTO);
        }
        return page.setRecords(records);
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号