Search in sources :

Example 1 with FieldFacetRequest

use of org.apache.solr.analytics.request.FieldFacetRequest in project lucene-solr by apache.

the class FacetingAccumulator method export.

@Override
@SuppressWarnings("unchecked")
public NamedList<?> export() {
    final NamedList<Object> base = (NamedList<Object>) super.export();
    NamedList<NamedList<?>> facetList = new NamedList<>();
    // Add the field facet buckets to the output
    base.add("fieldFacets", facetList);
    for (FieldFacetRequest freq : request.getFieldFacets()) {
        final String name = freq.getName();
        if (hiddenFieldFacets.contains(name)) {
            continue;
        }
        final Map<String, Expression[]> buckets = fieldFacetExpressions.get(name);
        final NamedList<Object> bucketBase = new NamedList<>();
        Iterable<Entry<String, Expression[]>> iter = buckets.entrySet();
        final FieldFacetRequest fr = (FieldFacetRequest) freq;
        final FacetSortSpecification sort = fr.getSort();
        final int limit = fr.getLimit();
        final int offset = fr.getOffset();
        final boolean showMissing = fr.showsMissing();
        if (!showMissing) {
            buckets.remove(MISSING_VALUE);
        }
        // Sorting the buckets if a sort specification is provided
        if (sort != null && buckets.values().iterator().hasNext()) {
            int sortPlace = Arrays.binarySearch(expressionNames, sort.getStatistic());
            final Expression first = buckets.values().iterator().next()[sortPlace];
            final Comparator<Expression> comp = (Comparator<Expression>) first.comparator(sort.getDirection());
            final List<Entry<String, Expression[]>> sorted = new ArrayList<>(buckets.size());
            Iterables.addAll(sorted, iter);
            Collections.sort(sorted, new EntryComparator(comp, sortPlace));
            iter = sorted;
        }
        // apply the limit
        if (limit > AnalyticsContentHandler.DEFAULT_FACET_LIMIT) {
            if (offset > 0) {
                iter = Iterables.skip(iter, offset);
            }
            iter = Iterables.limit(iter, limit);
        }
        // Export each expression in the bucket.
        for (Entry<String, Expression[]> bucket : iter) {
            bucketBase.add(bucket.getKey(), export(bucket.getValue()));
        }
        facetList.add(name, bucketBase);
    }
    // Add the range facet buckets to the output
    facetList = new NamedList<>();
    base.add("rangeFacets", facetList);
    for (RangeFacetRequest freq : request.getRangeFacets()) {
        final String name = freq.getName();
        final Map<String, Expression[]> buckets = rangeFacetExpressions.get(name);
        final NamedList<Object> bucketBase = new NamedList<>();
        Iterable<Entry<String, Expression[]>> iter = buckets.entrySet();
        for (Entry<String, Expression[]> bucket : iter) {
            bucketBase.add(bucket.getKey(), export(bucket.getValue()));
        }
        facetList.add(name, bucketBase);
    }
    // Add the query facet buckets to the output
    facetList = new NamedList<>();
    base.add("queryFacets", facetList);
    for (QueryFacetRequest freq : request.getQueryFacets()) {
        final String name = freq.getName();
        final Map<String, Expression[]> buckets = queryFacetExpressions.get(name);
        final NamedList<Object> bucketBase = new NamedList<>();
        Iterable<Entry<String, Expression[]>> iter = buckets.entrySet();
        for (Entry<String, Expression[]> bucket : iter) {
            bucketBase.add(bucket.getKey(), export(bucket.getValue()));
        }
        facetList.add(name, bucketBase);
    }
    return base;
}
Also used : RangeFacetRequest(org.apache.solr.analytics.request.RangeFacetRequest) NamedList(org.apache.solr.common.util.NamedList) ArrayList(java.util.ArrayList) Comparator(java.util.Comparator) FacetSortSpecification(org.apache.solr.analytics.request.FieldFacetRequest.FacetSortSpecification) Entry(java.util.Map.Entry) Expression(org.apache.solr.analytics.expression.Expression) FieldFacetRequest(org.apache.solr.analytics.request.FieldFacetRequest) QueryFacetRequest(org.apache.solr.analytics.request.QueryFacetRequest)

Aggregations

ArrayList (java.util.ArrayList)1 Comparator (java.util.Comparator)1 Entry (java.util.Map.Entry)1 Expression (org.apache.solr.analytics.expression.Expression)1 FieldFacetRequest (org.apache.solr.analytics.request.FieldFacetRequest)1 FacetSortSpecification (org.apache.solr.analytics.request.FieldFacetRequest.FacetSortSpecification)1 QueryFacetRequest (org.apache.solr.analytics.request.QueryFacetRequest)1 RangeFacetRequest (org.apache.solr.analytics.request.RangeFacetRequest)1 NamedList (org.apache.solr.common.util.NamedList)1