From a7a23222516015bd135a54d24a87796ade16d1c9 Mon Sep 17 00:00:00 2001 From: anil Date: Mon, 3 Jun 2024 10:42:12 +0530 Subject: [PATCH] user search facets patch --- .../sunbird/common/ElasticSearchHelper.java | 33 +++++++--- .../common/ElasticSearchRestHighImpl.java | 61 ++++++++++++------- .../main/java/org/sunbird/dto/SearchDTO.java | 16 ++++- 3 files changed, 76 insertions(+), 34 deletions(-) diff --git a/core/es-utils/src/main/java/org/sunbird/common/ElasticSearchHelper.java b/core/es-utils/src/main/java/org/sunbird/common/ElasticSearchHelper.java index 5440e6e2ba..6477e223cf 100644 --- a/core/es-utils/src/main/java/org/sunbird/common/ElasticSearchHelper.java +++ b/core/es-utils/src/main/java/org/sunbird/common/ElasticSearchHelper.java @@ -671,7 +671,9 @@ private static SearchDTO getBasicBuiders(SearchDTO search, Map s search.setQueryFields((List) searchQueryMap.get(JsonKey.QUERY_FIELDS)); } if (searchQueryMap.containsKey(JsonKey.FACETS)) { - search.setFacets((List>) searchQueryMap.get(JsonKey.FACETS)); + List facetsList= (List) searchQueryMap.get(JsonKey.FACETS); + search.setFacets(facetsList); + // search.setFacets((List>) searchQueryMap.get(JsonKey.FACETS)); } if (searchQueryMap.containsKey(JsonKey.FIELDS)) { search.setFields((List) searchQueryMap.get(JsonKey.FIELDS)); @@ -731,9 +733,16 @@ public static Map getSearchResponseMap( } private static List getFinalFacetList( - SearchResponse response, SearchDTO searchDTO, List finalFacetList) { + SearchResponse response, SearchDTO searchDTO, List finalFacetList) { if (null != searchDTO.getFacets() && !searchDTO.getFacets().isEmpty()) { - Map m1 = searchDTO.getFacets().get(0); + // Map m1 = searchDTO.getFacets().get(0); + List> groupByFinalList = new ArrayList<>(); + for (String facet : searchDTO.getFacets()) { + Map groupByMap = new HashMap(); + groupByMap.put("groupByParent", facet); + groupByFinalList.add(groupByMap); + } + Map m1 = groupByFinalList.get(0); for (Map.Entry entry : m1.entrySet()) { String field = entry.getKey(); String aggsType = entry.getValue(); @@ -751,16 +760,20 @@ private static List getFinalFacetList( aggsList.add(internalMap); } } else { - Terms aggs = response.getAggregations().get(field); - for (Bucket bucket : aggs.getBuckets()) { - Map internalMap = new HashMap(); - internalMap.put(JsonKey.NAME, bucket.getKey()); - internalMap.put(JsonKey.COUNT, bucket.getDocCount()); - aggsList.add(internalMap); + List facets = searchDTO.getFacets(); + for (String facet : facets) { + Terms aggs = response.getAggregations().get(facet); + for (Bucket bucket : aggs.getBuckets()) { + Map internalMap = new HashMap(); +// internalMap.put(JsonKey.NAME, bucket.getKey()); + internalMap.put(JsonKey.NAME, facet); + internalMap.put(JsonKey.COUNT, bucket.getDocCount()); + aggsList.add(internalMap); + } } } facetMap.put("values", aggsList); - facetMap.put(JsonKey.NAME, field); + // facetMap.put(JsonKey.NAME, aggsType); finalFacetList.add(facetMap); } } diff --git a/core/es-utils/src/main/java/org/sunbird/common/ElasticSearchRestHighImpl.java b/core/es-utils/src/main/java/org/sunbird/common/ElasticSearchRestHighImpl.java index 9bb607d821..3b3001489e 100644 --- a/core/es-utils/src/main/java/org/sunbird/common/ElasticSearchRestHighImpl.java +++ b/core/es-utils/src/main/java/org/sunbird/common/ElasticSearchRestHighImpl.java @@ -443,8 +443,14 @@ public Future> search( searchSourceBuilder.query(query); List finalFacetList = new ArrayList(); + List> groupByFinalList = new ArrayList<>(); if (null != searchDTO.getFacets() && !searchDTO.getFacets().isEmpty()) { - searchSourceBuilder = addAggregations(searchSourceBuilder, searchDTO.getFacets()); + for (String facet : searchDTO.getFacets()) { + Map groupByMap = new HashMap(); + groupByMap.put("groupByParent", facet); + groupByFinalList.add(groupByMap); + } + searchSourceBuilder = addAggregations(searchSourceBuilder, groupByFinalList); } logger.info( context, @@ -604,31 +610,44 @@ private static long calculateEndTime(long startTime) { } private static SearchSourceBuilder addAggregations( - SearchSourceBuilder searchSourceBuilder, List> facets) { + SearchSourceBuilder searchSourceBuilder, List> facets) { long startTime = System.currentTimeMillis(); logger.debug( null, "ElasticSearchRestHighImpl:addAggregations: method started at ==" + startTime); - Map map = facets.get(0); - for (Map.Entry entry : map.entrySet()) { - - String key = entry.getKey(); - String value = entry.getValue(); - if (JsonKey.DATE_HISTOGRAM.equalsIgnoreCase(value)) { - searchSourceBuilder.aggregation( - AggregationBuilders.dateHistogram(key) - .field(key + ElasticSearchHelper.RAW_APPEND) - .dateHistogramInterval(DateHistogramInterval.days(1))); - - } else if (null == value) { - searchSourceBuilder.aggregation( - AggregationBuilders.terms(key).field(key + ElasticSearchHelper.RAW_APPEND)); + // Map map = facets.get(0); + Object firstElement = facets.get(0); + if (firstElement instanceof Map) { + Map map = (Map) firstElement; + for (Map.Entry entry : map.entrySet()) { + + String key = entry.getKey().toString(); + String value = entry.getValue().toString(); + if (JsonKey.DATE_HISTOGRAM.equalsIgnoreCase(value)) { + searchSourceBuilder.aggregation( + AggregationBuilders.dateHistogram(key) + .field(key + ElasticSearchHelper.RAW_APPEND) + .dateHistogramInterval(DateHistogramInterval.days(1))); + + } else if (null == value) { + searchSourceBuilder.aggregation( + AggregationBuilders.terms(key).field(key + ElasticSearchHelper.RAW_APPEND)); + } else { + for (Map groupByMap : facets) { + String groupByParent = (String) groupByMap.get(key); + if (!value.contains(".")) { + searchSourceBuilder.aggregation(AggregationBuilders.terms(groupByParent) + .field(groupByParent + ElasticSearchHelper.RAW_APPEND) + .size(10000)); + } + } + } } + logger.debug( + null, + "ElasticSearchRestHighImpl:addAggregations: method end ==" + + " ,Total time elapsed = " + + calculateEndTime(startTime)); } - logger.debug( - null, - "ElasticSearchRestHighImpl:addAggregations: method end ==" - + " ,Total time elapsed = " - + calculateEndTime(startTime)); return searchSourceBuilder; } diff --git a/core/es-utils/src/main/java/org/sunbird/dto/SearchDTO.java b/core/es-utils/src/main/java/org/sunbird/dto/SearchDTO.java index d009c6e57b..621e3fff52 100644 --- a/core/es-utils/src/main/java/org/sunbird/dto/SearchDTO.java +++ b/core/es-utils/src/main/java/org/sunbird/dto/SearchDTO.java @@ -16,7 +16,8 @@ public class SearchDTO { @SuppressWarnings("rawtypes") private List properties; - private List> facets = new ArrayList<>(); +// private List> facets = new ArrayList<>(); + private List facets; private List fields; private List excludedFields; private Map sortBy = new HashMap<>(); @@ -81,11 +82,20 @@ public void setLimit(Integer limit) { this.limit = limit; } - public List> getFacets() { +// public List> getFacets() { +// return facets; +// } +// +// public void setFacets(List> facets) { +// this.facets = facets; +// } + + + public List getFacets() { return facets; } - public void setFacets(List> facets) { + public void setFacets(List facets) { this.facets = facets; }