List of usage examples for org.apache.solr.handler.component ResponseBuilder grouping
public boolean grouping()
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);
}