Example usage for org.apache.solr.spelling.suggest SuggesterResult getTokens

List of usage examples for org.apache.solr.spelling.suggest SuggesterResult getTokens

Introduction

In this page you can find the example usage for org.apache.solr.spelling.suggest SuggesterResult getTokens.

Prototype

public Set<String> getTokens(String suggesterName) 

Source Link

Document

Get the set of tokens that are present in the instance

Usage

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);
    }
}