Search in sources :

Example 1 with PivotFacetResult

use of com.rbmhtechnology.vind.api.result.facet.PivotFacetResult in project vind by RBMHTechnology.

the class ResultUtils method getPivotFacetResults.

private static Pair<String, List<PivotFacetResult>> getPivotFacetResults(Aggregation aggregation, Facet.PivotFacet pivotFacet, Map<String, Facet> vindFacets) {
    final FieldDescriptor field = pivotFacet.getFieldDescriptors().get(0);
    if (Objects.nonNull(aggregation)) {
        final ParsedTerms rootPivot = (ParsedTerms) aggregation;
        final List<PivotFacetResult> pivotFacetResult = rootPivot.getBuckets().stream().map(bucket -> {
            final Map<String, Aggregation> aggMap = bucket.getAggregations().asMap();
            final Aggregation pivotAgg = aggMap.get(pivotFacet.getFacetName());
            final Map<String, RangeFacetResult<?>> rangeSubfacets = new HashMap<>();
            final Map<String, QueryFacetResult<?>> querySubfacets = new HashMap<>();
            final Map<String, StatsFacetResult<?>> statsSubfacets = new HashMap<>();
            Double score = null;
            if (!pivotFacet.getSortings().isEmpty()) {
                score = pivotFacet.getSortings().keySet().stream().map(aggMap::get).mapToDouble(sortAgg -> ((ParsedSingleValueNumericMetricsAggregation) sortAgg).value()).sum();
            }
            aggMap.values().forEach(agg -> {
                if (ParsedExtendedStats.class.isAssignableFrom(agg.getClass())) {
                    final HashMap<String, Aggregation> statsMap = new HashMap<>();
                    statsMap.put(agg.getName(), agg);
                    statsSubfacets.put(agg.getName(), ResultUtils.getStatsFacetResults(statsMap, (Facet.StatsFacet) vindFacets.get(agg.getName())).getValue());
                }
                if (ParsedQuery.class.isAssignableFrom(agg.getClass())) {
                    querySubfacets.put(agg.getName(), ResultUtils.getQueryFacetResults(agg, (Facet.QueryFacet) vindFacets.get(agg.getName())).getValue());
                }
                if (ParsedRange.class.isAssignableFrom(agg.getClass())) {
                    rangeSubfacets.put(agg.getName(), ResultUtils.getRangeFacetResults(agg, vindFacets.get(agg.getName())).getValue());
                }
            });
            final List<PivotFacetResult> subPivot = getPivotFacetResults(pivotAgg, pivotFacet, vindFacets).getValue();
            return new PivotFacetResult(subPivot, bucket.getKey(), field, Long.valueOf(bucket.getDocCount()).intValue(), rangeSubfacets, querySubfacets, statsSubfacets, score);
        }).collect(Collectors.toList());
        return Pair.of(pivotFacet.getFacetName(), pivotFacetResult);
    }
    return Pair.of(null, null);
}
Also used : ElasticsearchException(org.elasticsearch.ElasticsearchException) StatsFacetResult(com.rbmhtechnology.vind.api.result.facet.StatsFacetResult) GetResponse(org.elasticsearch.action.get.GetResponse) Arrays(java.util.Arrays) FacetValue(com.rbmhtechnology.vind.api.result.facet.FacetValue) ParsedDateRange(org.elasticsearch.search.aggregations.bucket.range.ParsedDateRange) ParsedQuery(org.elasticsearch.index.query.ParsedQuery) ParsedStringTerms(org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms) IntervalFacetResult(com.rbmhtechnology.vind.api.result.facet.IntervalFacetResult) Pair(org.apache.commons.lang3.tuple.Pair) Facet(com.rbmhtechnology.vind.api.query.facet.Facet) Map(java.util.Map) SearchResponse(org.elasticsearch.action.search.SearchResponse) QueryFacetResult(com.rbmhtechnology.vind.api.result.facet.QueryFacetResult) ParsedSingleValueNumericMetricsAggregation(org.elasticsearch.search.aggregations.metrics.ParsedSingleValueNumericMetricsAggregation) SearchHit(org.elasticsearch.search.SearchHit) MultiGetResponse(org.elasticsearch.action.get.MultiGetResponse) Aggregations(org.elasticsearch.search.aggregations.Aggregations) Collection(java.util.Collection) ParsedCardinality(org.elasticsearch.search.aggregations.metrics.ParsedCardinality) MultiGetItemResponse(org.elasticsearch.action.get.MultiGetItemResponse) Streams(com.google.common.collect.Streams) GetResult(com.rbmhtechnology.vind.api.result.GetResult) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) RealTimeGet(com.rbmhtechnology.vind.api.query.get.RealTimeGet) List(java.util.List) ParsedPercentiles(org.elasticsearch.search.aggregations.metrics.ParsedPercentiles) Stream(java.util.stream.Stream) ParsedMissing(org.elasticsearch.search.aggregations.bucket.missing.ParsedMissing) MultiBucketsAggregation(org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation) Optional(java.util.Optional) SubdocumentFacetResult(com.rbmhtechnology.vind.api.result.facet.SubdocumentFacetResult) FieldDescriptor(com.rbmhtechnology.vind.model.FieldDescriptor) ArrayUtils(org.apache.commons.lang3.ArrayUtils) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) CollectionUtils(org.apache.commons.collections.CollectionUtils) Percentile(org.elasticsearch.search.aggregations.metrics.Percentile) Aggregation(org.elasticsearch.search.aggregations.Aggregation) ParsedFilters(org.elasticsearch.search.aggregations.bucket.filter.ParsedFilters) TermFacetResult(com.rbmhtechnology.vind.api.result.facet.TermFacetResult) FacetResults(com.rbmhtechnology.vind.api.result.FacetResults) ParsedTerms(org.elasticsearch.search.aggregations.bucket.terms.ParsedTerms) RangeFacetResult(com.rbmhtechnology.vind.api.result.facet.RangeFacetResult) ParsedDateHistogram(org.elasticsearch.search.aggregations.bucket.histogram.ParsedDateHistogram) ParsedExtendedStats(org.elasticsearch.search.aggregations.metrics.ParsedExtendedStats) Document(com.rbmhtechnology.vind.api.Document) ParsedRange(org.elasticsearch.search.aggregations.bucket.range.ParsedRange) PivotFacetResult(com.rbmhtechnology.vind.api.result.facet.PivotFacetResult) DocumentFactory(com.rbmhtechnology.vind.model.DocumentFactory) Collections(java.util.Collections) ParsedHistogram(org.elasticsearch.search.aggregations.bucket.histogram.ParsedHistogram) ParsedExtendedStats(org.elasticsearch.search.aggregations.metrics.ParsedExtendedStats) ParsedTerms(org.elasticsearch.search.aggregations.bucket.terms.ParsedTerms) HashMap(java.util.HashMap) ParsedQuery(org.elasticsearch.index.query.ParsedQuery) FieldDescriptor(com.rbmhtechnology.vind.model.FieldDescriptor) ParsedSingleValueNumericMetricsAggregation(org.elasticsearch.search.aggregations.metrics.ParsedSingleValueNumericMetricsAggregation) MultiBucketsAggregation(org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation) Aggregation(org.elasticsearch.search.aggregations.Aggregation) ParsedSingleValueNumericMetricsAggregation(org.elasticsearch.search.aggregations.metrics.ParsedSingleValueNumericMetricsAggregation) List(java.util.List) ArrayList(java.util.ArrayList) ParsedRange(org.elasticsearch.search.aggregations.bucket.range.ParsedRange) Map(java.util.Map) HashMap(java.util.HashMap) PivotFacetResult(com.rbmhtechnology.vind.api.result.facet.PivotFacetResult)

Aggregations

Streams (com.google.common.collect.Streams)1 Document (com.rbmhtechnology.vind.api.Document)1 Facet (com.rbmhtechnology.vind.api.query.facet.Facet)1 RealTimeGet (com.rbmhtechnology.vind.api.query.get.RealTimeGet)1 FacetResults (com.rbmhtechnology.vind.api.result.FacetResults)1 GetResult (com.rbmhtechnology.vind.api.result.GetResult)1 FacetValue (com.rbmhtechnology.vind.api.result.facet.FacetValue)1 IntervalFacetResult (com.rbmhtechnology.vind.api.result.facet.IntervalFacetResult)1 PivotFacetResult (com.rbmhtechnology.vind.api.result.facet.PivotFacetResult)1 QueryFacetResult (com.rbmhtechnology.vind.api.result.facet.QueryFacetResult)1 RangeFacetResult (com.rbmhtechnology.vind.api.result.facet.RangeFacetResult)1 StatsFacetResult (com.rbmhtechnology.vind.api.result.facet.StatsFacetResult)1 SubdocumentFacetResult (com.rbmhtechnology.vind.api.result.facet.SubdocumentFacetResult)1 TermFacetResult (com.rbmhtechnology.vind.api.result.facet.TermFacetResult)1 DocumentFactory (com.rbmhtechnology.vind.model.DocumentFactory)1 FieldDescriptor (com.rbmhtechnology.vind.model.FieldDescriptor)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1