赞
踩
public List<TungDTO> getByEstateInfoId(Integer estateInfoId) { List<TungDTO> tungDTOList = new ArrayList<>(); BoolQueryBuilder builder = new BoolQueryBuilder() .must(QueryBuilders.termQuery(EstateRoomConstant.HOUSE_ID, estateInfoId)) .must(QueryBuilders.termQuery(EstateRoomConstant.IS_DEL, 0)); TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders .terms("tung_terms") .field(EstateRoomConstant.TUNG) .size(1000) .order(BucketOrder.key(true)) //根据Key 进行升序asc .subAggregation( AggregationBuilders .terms("unit_terms") .field(EstateRoomConstant.UNIT) .size(1000) .order(BucketOrder.key(true)) .subAggregation( AggregationBuilders .terms("floor_terms") .field(EstateRoomConstant.FLOOR) .size(1000) .order(BucketOrder.key(true)) .subAggregation( AggregationBuilders .terms("rooms_terms") .field(EstateRoomConstant.ROOMS) .size(1000) .order(BucketOrder.key(true)) ) ) ); SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(builder) .withPageable(PageRequest.of(0, 1)) .withSourceFilter(new FetchSourceFilter(new String[]{EstateRoomConstant.HOUSE_ID}, null)) .addAggregation(termsAggregationBuilder) .build(); log.info("查询{}索引的dsl:{}", IndexAndTypeConstant.DSS_ESTATE_ROOM_INDEX, new SearchSourceBuilder().query(searchQuery.getQuery()).aggregation(termsAggregationBuilder).fetchSource(new String[]{EstateRoomConstant.HOUSE_ID}, null).from(0).size(1)); AggregatedPage<EstateRoomEntity> aggregatedPage = elasticsearchTemplate.queryForPage(searchQuery, EstateRoomEntity.class); Terms tung_terms = aggregatedPage.getAggregations().get("tung_terms"); if (null != tung_terms && null != tung_terms.getBuckets() && !tung_terms.getBuckets().isEmpty()) { tung_terms.getBuckets().forEach(tung_bucket -> { TungDTO tungDTO = new TungDTO(); List<UnitDTO> unitDTOList = new ArrayList<>(); String tung = tung_bucket.getKeyAsString(); Terms unit_terms = tung_bucket.getAggregations().get("unit_terms"); if (null != unit_terms && null != unit_terms.getBuckets() && !unit_terms.getBuckets().isEmpty()) { unit_terms.getBuckets().forEach(unit_bucket -> { UnitDTO unitDTO = new UnitDTO(); List<FloorDTO> floorDTOList = new ArrayList<>(); String unit = unit_bucket.getKeyAsString(); Terms floor_terms = unit_bucket.getAggregations().get("floor_terms"); if (null != floor_terms && null != floor_terms.getBuckets() && !floor_terms.getBuckets().isEmpty()) { floor_terms.getBuckets().forEach(floor_bucket -> { FloorDTO floorDTO = new FloorDTO(); List<RoomsDTO> roomsDTOList = new ArrayList<>(); String floor = floor_bucket.getKeyAsString(); Terms rooms_terms = floor_bucket.getAggregations().get("rooms_terms"); if (null != rooms_terms && null != rooms_terms.getBuckets() && !rooms_terms.getBuckets().isEmpty()) { rooms_terms.getBuckets().forEach(rooms_bucket -> { String rooms = rooms_bucket.getKeyAsString(); RoomsDTO roomsDTO = new RoomsDTO(); roomsDTO.setRooms(rooms); List<String> roomsList = new ArrayList<>(); if (rooms.contains(",")) { List<String> list = Arrays.asList(rooms.split(",")); list.forEach(room -> { room = floor + "0" + room; roomsList.add(room); }); } else { roomsList.add(rooms); } roomsDTO.setRoomsList(roomsList); roomsDTOList.add(roomsDTO); }); } floorDTO.setFloor(floor); floorDTO.setRoomsDTOList(roomsDTOList); floorDTOList.add(floorDTO); }); } unitDTO.setUnit(unit); unitDTO.setFloorDTOList(floorDTOList); unitDTOList.add(unitDTO); }); } tungDTO.setTung(tung); tungDTO.setUnitDTOList(unitDTOList); tungDTOList.add(tungDTO); }); } return tungDTOList; }
Kibana查询语句
GET dss_estate_room_index/_search { "from": 0, "size": 1, "query": { "bool": { "must": [ { "term": { "houseId": { "value": 5050, "boost": 1 } } } ], "adjust_pure_negative": true, "boost": 1 } }, "_source": { "includes": [ "houseId" ], "excludes": [] }, "aggregations": { "tung_terms": { "terms": { "field": "tung", "size": 1000, "min_doc_count": 1, "shard_min_doc_count": 0, "show_term_doc_count_error": false, "order": { "_key": "asc" } }, "aggregations": { "unit_terms": { "terms": { "field": "unit", "size": 1000, "min_doc_count": 1, "shard_min_doc_count": 0, "show_term_doc_count_error": false, "order": { "_key": "asc" } }, "aggregations": { "floor_terms": { "terms": { "field": "floor", "size": 1000, "min_doc_count": 1, "shard_min_doc_count": 0, "show_term_doc_count_error": false, "order": { "_key": "asc" } }, "aggregations": { "rooms_terms": { "terms": { "field": "rooms", "size": 1000, "min_doc_count": 1, "shard_min_doc_count": 0, "show_term_doc_count_error": false, "order": { "_key": "asc" } } } } } } } } } } }```
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。