Example usage for org.apache.solr.handler.component ResponseBuilder grouping

List of usage examples for org.apache.solr.handler.component ResponseBuilder grouping

Introduction

In this page you can find the example usage for org.apache.solr.handler.component ResponseBuilder grouping.

Prototype

public boolean grouping() 

Source Link

Usage

From source file:lux.solr.XQueryComponent.java

License:Mozilla Public License

@Override
public void process(ResponseBuilder rb) throws IOException {
    if (rb.grouping()) {
        throw new SolrException(ErrorCode.BAD_REQUEST, "grouping not supported for XQuery");
    }//from www.j a  va 2 s.  c  om
    SolrQueryRequest req = rb.req;
    SolrParams params = req.getParams();
    if (!params.getBool(XQUERY_COMPONENT_NAME, true)) {
        // TODO -- what is this for? who would pass xquery=false??
        return;
    }
    int start = params.getInt(CommonParams.START, 1);
    int len = params.getInt(CommonParams.ROWS, -1);
    try {
        evaluateQuery(rb, start, len);
    } finally {
        solrIndexConfig.returnSerializer(serializer);
    }
}

From source file:lux.solr.XQueryComponent.java

License:Mozilla Public License

/**
 * Process for a distributed search. This method is called at various stages
 * during the processing of a request://from   ww  w. j  a va2 s  .c om
 * 
 * During ResponseBuilder.STAGE_PARSE_QUERY we parse, optimize, compile and
 * execute the XQuery query. When a lux:search call is encountered, it will
 * create a SearchResultIterator, which creates a Lucene Query and calls
 * back into the SearchHandler; then subsequent phases are handled by the
 * normal QueryComponent.
 * 
 * @return the next stage for this component
 */
@Override
public int distributedProcess(ResponseBuilder rb) throws IOException {
    if (rb.grouping()) {
        throw new SolrException(ErrorCode.BAD_REQUEST, "Solr grouping not supported for XQuery");
    }
    if (rb.stage == ResponseBuilder.STAGE_PARSE_QUERY) {
        if (rb.req instanceof CloudQueryRequest) {
            CloudQueryRequest cloudReq = (CloudQueryRequest) rb.req;
            // the sort spec has already been generated
            rb.setSortSpec(cloudReq.getSortSpec());
            return ResponseBuilder.STAGE_EXECUTE_QUERY;
        } else {
            process(rb);
            return ResponseBuilder.STAGE_DONE;
        }
    } else {
        return super.distributedProcess(rb);
    }
}

From source file:org.dice.solrenhancements.spellchecker.DiceSpellCheckComponent.java

License:Apache License

@Override
public void modifyRequest(ResponseBuilder rb, SearchComponent who, ShardRequest sreq) {
    SolrParams params = rb.req.getParams();
    if (!params.getBool(COMPONENT_NAME, false))
        return;//from   w  w w  . ja v a 2s .c  o  m
    int purpose = rb.grouping() ? ShardRequest.PURPOSE_GET_TOP_GROUPS : ShardRequest.PURPOSE_GET_TOP_IDS;
    if ((sreq.purpose & purpose) != 0) {
        // fetch at least 5 suggestions from each shard
        int count = sreq.params.getInt(SPELLCHECK_COUNT, 1);
        if (count < 5)
            count = 5;
        sreq.params.set(SPELLCHECK_COUNT, count);
        sreq.params.set("spellcheck", "true");
    } else {
        sreq.params.set("spellcheck", "false");
    }
}

From source file:org.dice.solrenhancements.spellchecker.DiceSpellCheckComponent.java

License:Apache License

@Override
@SuppressWarnings({ "unchecked", "deprecation" })
public void finishStage(ResponseBuilder rb) {
    SolrParams params = rb.req.getParams();
    if (!params.getBool(COMPONENT_NAME, false) || rb.stage != ResponseBuilder.STAGE_GET_FIELDS)
        return;//www . j  ava2s  .  c o m

    boolean extendedResults = params.getBool(SPELLCHECK_EXTENDED_RESULTS, false);
    boolean collate = params.getBool(SPELLCHECK_COLLATE, false);
    boolean collationExtendedResults = params.getBool(SPELLCHECK_COLLATE_EXTENDED_RESULTS, false);
    int maxCollationTries = params.getInt(SPELLCHECK_MAX_COLLATION_TRIES, 0);
    int maxCollations = params.getInt(SPELLCHECK_MAX_COLLATIONS, 1);
    Integer maxResultsForSuggest = params.getInt(SpellingParams.SPELLCHECK_MAX_RESULTS_FOR_SUGGEST);
    int count = rb.req.getParams().getInt(SPELLCHECK_COUNT, 1);
    int numSug = Math.max(count, AbstractLuceneSpellChecker.DEFAULT_SUGGESTION_COUNT);

    String origQuery = params.get(SPELLCHECK_Q);
    if (origQuery == null) {
        origQuery = rb.getQueryString();
        if (origQuery == null) {
            origQuery = params.get(CommonParams.Q);
        }
    }

    long hits = rb.grouping() ? rb.totalHitCount : rb.getNumberDocumentsFound();
    boolean isCorrectlySpelled = hits > (maxResultsForSuggest == null ? 0 : maxResultsForSuggest);

    SpellCheckMergeData mergeData = new SpellCheckMergeData();
    if (maxResultsForSuggest == null || !isCorrectlySpelled) {
        for (ShardRequest sreq : rb.finished) {
            for (ShardResponse srsp : sreq.responses) {
                NamedList nl = (NamedList) srsp.getSolrResponse().getResponse().get("spellcheck");
                LOG.info(srsp.getShard() + " " + nl);
                if (nl != null) {
                    mergeData.totalNumberShardResponses++;
                    collectShardSuggestions(nl, mergeData);
                    collectShardCollations(mergeData, nl, maxCollationTries);
                }
            }
        }
    }

    // all shard responses have been collected
    // create token and get top suggestions
    SolrSpellChecker checker = getSpellChecker(rb.req.getParams());
    SpellingResult result = checker.mergeSuggestions(mergeData, numSug, count, extendedResults);

    NamedList response = new SimpleOrderedMap();
    NamedList suggestions = toNamedList(false, result, origQuery, extendedResults, collate, isCorrectlySpelled);
    if (collate) {
        SpellCheckCollation[] sortedCollations = mergeData.collations.values()
                .toArray(new SpellCheckCollation[mergeData.collations.size()]);
        Arrays.sort(sortedCollations);
        int i = 0;
        while (i < maxCollations && i < sortedCollations.length) {
            SpellCheckCollation collation = sortedCollations[i];
            i++;
            if (collationExtendedResults) {
                NamedList extendedResult = new NamedList();
                extendedResult.add("collationQuery", collation.getCollationQuery());
                extendedResult.add("hits", collation.getHits());
                extendedResult.add("misspellingsAndCorrections", collation.getMisspellingsAndCorrections());
                suggestions.add("collation", extendedResult);
            } else {
                suggestions.add("collation", collation.getCollationQuery());
            }
        }
    }

    response.add("suggestions", suggestions);
    rb.rsp.add("spellcheck", response);
}