List of usage examples for org.apache.solr.spelling SpellCheckCollator SpellCheckCollator
SpellCheckCollator
From source file:org.dice.solrenhancements.spellchecker.DiceSpellCheckComponent.java
License:Apache License
@SuppressWarnings("unchecked") protected void addCollationsToResponse(SolrParams params, SpellingResult spellingResult, ResponseBuilder rb, String q, NamedList response, boolean suggestionsMayOverlap) { int maxCollations = params.getInt(SPELLCHECK_MAX_COLLATIONS, 1); int maxCollationTries = params.getInt(SPELLCHECK_MAX_COLLATION_TRIES, 0); int maxCollationEvaluations = params.getInt(SPELLCHECK_MAX_COLLATION_EVALUATIONS, 10000); boolean collationExtendedResults = params.getBool(SPELLCHECK_COLLATE_EXTENDED_RESULTS, false); int maxCollationCollectDocs = params.getInt(SPELLCHECK_COLLATE_MAX_COLLECT_DOCS, 0); // If not reporting hits counts, don't bother collecting more than 1 document per try. if (!collationExtendedResults) { maxCollationCollectDocs = 1;// ww w .java 2 s. co m } boolean shard = params.getBool(ShardParams.IS_SHARD, false); SpellCheckCollator collator = new SpellCheckCollator().setMaxCollations(maxCollations) .setMaxCollationTries(maxCollationTries).setMaxCollationEvaluations(maxCollationEvaluations) .setSuggestionsMayOverlap(suggestionsMayOverlap).setDocCollectionLimit(maxCollationCollectDocs); List<SpellCheckCollation> collations = collator.collate(spellingResult, q, rb); //by sorting here we guarantee a non-distributed request returns all //results in the same order as a distributed request would, //even in cases when the internal rank is the same. Collections.sort(collations); for (SpellCheckCollation collation : collations) { if (collationExtendedResults) { NamedList extendedResult = new NamedList(); extendedResult.add("collationQuery", collation.getCollationQuery()); extendedResult.add("hits", collation.getHits()); extendedResult.add("misspellingsAndCorrections", collation.getMisspellingsAndCorrections()); if (maxCollationTries > 0 && shard) { extendedResult.add("collationInternalRank", collation.getInternalRank()); } response.add("collation", extendedResult); } else { response.add("collation", collation.getCollationQuery()); if (maxCollationTries > 0 && shard) { response.add("collationInternalRank", collation.getInternalRank()); } } } }