Search in sources :

Example 1 with QueryFacetAccumulator

use of org.apache.solr.analytics.accumulator.facet.QueryFacetAccumulator in project lucene-solr by apache.

the class FacetingAccumulator method processQueryFacets.

/**
   * Initiates the collecting of query facets
   * @param filter the base filter to work against
   * @throws IOException if searching failed
   */
public void processQueryFacets(final Filter filter) throws IOException {
    for (QueryFacetRequest qfr : queryFacets) {
        for (String query : qfr.getQueries()) {
            if (query.contains(AnalyticsParams.RESULT) && !query.contains(AnalyticsParams.QUERY_RESULT)) {
                try {
                    String[] pivotStr = ExpressionFactory.getArguments(query.substring(query.indexOf('(') + 1, query.lastIndexOf(')')).trim());
                    if (pivotStr.length == 1) {
                        query = getResult(pivotStr[0]);
                    } else if (pivotStr.length == 3) {
                        query = getResult(pivotStr[0], pivotStr[1], pivotStr[2]);
                    } else {
                        throw new SolrException(ErrorCode.BAD_REQUEST, "Result request " + query + " has an invalid amount of arguments.");
                    }
                } catch (IndexOutOfBoundsException e) {
                    throw new SolrException(ErrorCode.BAD_REQUEST, "Result request " + query + " is invalid. Lacks parentheses.", e);
                }
            } else if (query.contains(AnalyticsParams.QUERY_RESULT)) {
                try {
                    String[] pivotStr = ExpressionFactory.getArguments(query.substring(query.indexOf('(') + 1, query.lastIndexOf(')')).trim());
                    if (pivotStr.length == 3) {
                        query = getQueryResult(qfr.getName(), pivotStr[0], pivotStr[1], pivotStr[2]);
                    } else {
                        throw new SolrException(ErrorCode.BAD_REQUEST, "Result request " + query + " has an invalid amount of arguments.");
                    }
                } catch (IndexOutOfBoundsException e) {
                    throw new SolrException(ErrorCode.BAD_REQUEST, "Result request " + query + " is invalid. Lacks parentheses.", e);
                }
            }
            QueryFacetAccumulator qAcc = new QueryFacetAccumulator(this, qfr.getName(), query);
            final Query q;
            try {
                q = QParser.getParser(query, queryRequest).getQuery();
            } catch (SyntaxError e) {
                throw new SolrException(ErrorCode.BAD_REQUEST, "Invalid query '" + query + "'", e);
            }
            // The searcher sends docIds to the QueryFacetAccumulator which forwards
            // them to <code>collectQuery()</code> in this class for collection.
            Query filtered = new BooleanQuery.Builder().add(q, Occur.MUST).add(filter, Occur.FILTER).build();
            searcher.search(filtered, qAcc);
            computeQueryFacet(qfr.getName());
            queryCount++;
        }
    }
}
Also used : QueryFacetAccumulator(org.apache.solr.analytics.accumulator.facet.QueryFacetAccumulator) BooleanQuery(org.apache.lucene.search.BooleanQuery) Query(org.apache.lucene.search.Query) BooleanQuery(org.apache.lucene.search.BooleanQuery) SyntaxError(org.apache.solr.search.SyntaxError) QueryFacetRequest(org.apache.solr.analytics.request.QueryFacetRequest) SolrException(org.apache.solr.common.SolrException)

Aggregations

BooleanQuery (org.apache.lucene.search.BooleanQuery)1 Query (org.apache.lucene.search.Query)1 QueryFacetAccumulator (org.apache.solr.analytics.accumulator.facet.QueryFacetAccumulator)1 QueryFacetRequest (org.apache.solr.analytics.request.QueryFacetRequest)1 SolrException (org.apache.solr.common.SolrException)1 SyntaxError (org.apache.solr.search.SyntaxError)1