Search in sources :

Example 1 with AllGroupsCollector

use of org.apache.lucene.search.grouping.AllGroupsCollector in project lucene-solr by apache.

the class SimpleFacets method getGroupedFacetQueryCount.

/**
   * Returns a grouped facet count for the facet query
   *
   * @see FacetParams#FACET_QUERY
   */
public int getGroupedFacetQueryCount(Query facetQuery, DocSet docSet) throws IOException {
    // It is okay to retrieve group.field from global because it is never a local param
    String groupField = global.get(GroupParams.GROUP_FIELD);
    if (groupField == null) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Specify the group.field as parameter or local parameter");
    }
    AllGroupsCollector collector = new AllGroupsCollector<>(new TermGroupSelector(groupField));
    // This returns a filter that only matches documents matching with q param and fq params
    Filter mainQueryFilter = docSet.getTopFilter();
    Query filteredFacetQuery = new BooleanQuery.Builder().add(facetQuery, Occur.MUST).add(mainQueryFilter, Occur.FILTER).build();
    searcher.search(filteredFacetQuery, collector);
    return collector.getGroupCount();
}
Also used : BooleanQuery(org.apache.lucene.search.BooleanQuery) Query(org.apache.lucene.search.Query) BooleanQuery(org.apache.lucene.search.BooleanQuery) Filter(org.apache.solr.search.Filter) AllGroupsCollector(org.apache.lucene.search.grouping.AllGroupsCollector) TermGroupSelector(org.apache.lucene.search.grouping.TermGroupSelector) SolrException(org.apache.solr.common.SolrException)

Example 2 with AllGroupsCollector

use of org.apache.lucene.search.grouping.AllGroupsCollector in project lucene-solr by apache.

the class SearchGroupsFieldCommand method create.

@Override
public List<Collector> create() throws IOException {
    final List<Collector> collectors = new ArrayList<>(2);
    final FieldType fieldType = field.getType();
    if (topNGroups > 0) {
        if (fieldType.getNumberType() != null) {
            ValueSource vs = fieldType.getValueSource(field, null);
            firstPassGroupingCollector = new FirstPassGroupingCollector<>(new ValueSourceGroupSelector(vs, new HashMap<>()), groupSort, topNGroups);
        } else {
            firstPassGroupingCollector = new FirstPassGroupingCollector<>(new TermGroupSelector(field.getName()), groupSort, topNGroups);
        }
        collectors.add(firstPassGroupingCollector);
    }
    if (includeGroupCount) {
        if (fieldType.getNumberType() != null) {
            ValueSource vs = fieldType.getValueSource(field, null);
            allGroupsCollector = new AllGroupsCollector<>(new ValueSourceGroupSelector(vs, new HashMap<>()));
        } else {
            allGroupsCollector = new AllGroupsCollector<>(new TermGroupSelector(field.getName()));
        }
        collectors.add(allGroupsCollector);
    }
    return collectors;
}
Also used : ValueSource(org.apache.lucene.queries.function.ValueSource) ArrayList(java.util.ArrayList) AllGroupsCollector(org.apache.lucene.search.grouping.AllGroupsCollector) Collector(org.apache.lucene.search.Collector) FirstPassGroupingCollector(org.apache.lucene.search.grouping.FirstPassGroupingCollector) ValueSourceGroupSelector(org.apache.lucene.search.grouping.ValueSourceGroupSelector) TermGroupSelector(org.apache.lucene.search.grouping.TermGroupSelector) FieldType(org.apache.solr.schema.FieldType)

Aggregations

AllGroupsCollector (org.apache.lucene.search.grouping.AllGroupsCollector)2 TermGroupSelector (org.apache.lucene.search.grouping.TermGroupSelector)2 ArrayList (java.util.ArrayList)1 ValueSource (org.apache.lucene.queries.function.ValueSource)1 BooleanQuery (org.apache.lucene.search.BooleanQuery)1 Collector (org.apache.lucene.search.Collector)1 Query (org.apache.lucene.search.Query)1 FirstPassGroupingCollector (org.apache.lucene.search.grouping.FirstPassGroupingCollector)1 ValueSourceGroupSelector (org.apache.lucene.search.grouping.ValueSourceGroupSelector)1 SolrException (org.apache.solr.common.SolrException)1 FieldType (org.apache.solr.schema.FieldType)1 Filter (org.apache.solr.search.Filter)1