List of usage examples for org.apache.solr.spelling.suggest SuggesterResult getTokens
public Set<String> getTokens(String suggesterName)
From source file:org.alfresco.solr.component.AsyncBuildSuggestComponent.java
License:Open Source License
/** * Given a list of {@link SuggesterResult} and <code>count</code> * returns a {@link SuggesterResult} containing <code>count</code> * number of {@link LookupResult}, sorted by their associated * weights//from w w w. j a va 2 s . co m * */ private static SuggesterResult merge(List<SuggesterResult> suggesterResults, int count) { SuggesterResult result = new SuggesterResult(); Set<String> allTokens = new HashSet<>(); Set<String> suggesterNames = new HashSet<>(); // collect all tokens for (SuggesterResult shardResult : suggesterResults) { for (String suggesterName : shardResult.getSuggesterNames()) { allTokens.addAll(shardResult.getTokens(suggesterName)); suggesterNames.add(suggesterName); } } // Get Top N for every token in every shard (using weights) for (String suggesterName : suggesterNames) { for (String token : allTokens) { Lookup.LookupPriorityQueue resultQueue = new Lookup.LookupPriorityQueue(count); for (SuggesterResult shardResult : suggesterResults) { List<LookupResult> suggests = shardResult.getLookupResult(suggesterName, token); if (suggests == null) { continue; } for (LookupResult res : suggests) { resultQueue.insertWithOverflow(res); } } List<LookupResult> sortedSuggests = new LinkedList<>(); Collections.addAll(sortedSuggests, resultQueue.getResults()); result.add(suggesterName, token, sortedSuggests); } } return result; }
From source file:org.alfresco.solr.component.AsyncBuildSuggestComponent.java
License:Open Source License
/** Convert {@link SuggesterResult} to NamedList for constructing responses */ private void toNamedList(SuggesterResult suggesterResult, Map<String, SimpleOrderedMap<NamedList<Object>>> resultObj) { for (String suggesterName : suggesterResult.getSuggesterNames()) { SimpleOrderedMap<NamedList<Object>> results = new SimpleOrderedMap<>(); for (String token : suggesterResult.getTokens(suggesterName)) { SimpleOrderedMap<Object> suggestionBody = new SimpleOrderedMap<>(); List<LookupResult> lookupResults = suggesterResult.getLookupResult(suggesterName, token); suggestionBody.add(SuggesterResultLabels.SUGGESTION_NUM_FOUND, lookupResults.size()); List<SimpleOrderedMap<Object>> suggestEntriesNamedList = new ArrayList<>(); for (LookupResult lookupResult : lookupResults) { String suggestionString = lookupResult.key.toString(); long weight = lookupResult.value; String payload = (lookupResult.payload != null) ? lookupResult.payload.utf8ToString() : ""; SimpleOrderedMap<Object> suggestEntryNamedList = new SimpleOrderedMap<>(); suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_TERM, suggestionString); suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_WEIGHT, weight); suggestEntryNamedList.add(SuggesterResultLabels.SUGGESTION_PAYLOAD, payload); suggestEntriesNamedList.add(suggestEntryNamedList); }/*from ww w .j av a 2 s . c o m*/ suggestionBody.add(SuggesterResultLabels.SUGGESTIONS, suggestEntriesNamedList); results.add(token, suggestionBody); } resultObj.put(suggesterName, results); } }