List of usage examples for org.apache.solr.spelling.suggest SuggesterResult add
public void add(String suggesterName, String token, List<LookupResult> results)
token 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 av a2 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 NamedList (suggester response) to {@link SuggesterResult} */ private SuggesterResult toSuggesterResult(Map<String, SimpleOrderedMap<NamedList<Object>>> suggestionsMap) { SuggesterResult result = new SuggesterResult(); if (suggestionsMap == null) { return result; }/*from w w w . j av a2 s.co m*/ // for each token for (Map.Entry<String, SimpleOrderedMap<NamedList<Object>>> entry : suggestionsMap.entrySet()) { String suggesterName = entry.getKey(); for (Iterator<Map.Entry<String, NamedList<Object>>> suggestionsIter = entry.getValue() .iterator(); suggestionsIter.hasNext();) { Map.Entry<String, NamedList<Object>> suggestions = suggestionsIter.next(); String tokenString = suggestions.getKey(); List<LookupResult> lookupResults = new ArrayList<>(); NamedList<Object> suggestion = suggestions.getValue(); // for each suggestion for (int j = 0; j < suggestion.size(); j++) { String property = suggestion.getName(j); if (property.equals(SuggesterResultLabels.SUGGESTIONS)) { @SuppressWarnings("unchecked") List<NamedList<Object>> suggestionEntries = (List<NamedList<Object>>) suggestion.getVal(j); for (NamedList<Object> suggestionEntry : suggestionEntries) { String term = (String) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_TERM); Long weight = (Long) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_WEIGHT); String payload = (String) suggestionEntry.get(SuggesterResultLabels.SUGGESTION_PAYLOAD); LookupResult res = new LookupResult(new CharsRef(term), weight, new BytesRef(payload)); lookupResults.add(res); } } result.add(suggesterName, tokenString, lookupResults); } } } return result; }