Example usage for org.apache.solr.spelling SpellingResult getTokenFrequency

List of usage examples for org.apache.solr.spelling SpellingResult getTokenFrequency

Introduction

In this page you can find the example usage for org.apache.solr.spelling SpellingResult getTokenFrequency.

Prototype

public Integer getTokenFrequency(Token token) 

Source Link

Document

The token frequency of the input token in the collection

Usage

From source file:org.dice.solrenhancements.spellchecker.DiceSpellCheckComponent.java

License:Apache License

protected NamedList toNamedList(boolean shardRequest, SpellingResult spellingResult, String origQuery,
        boolean extendedResults, boolean collate, boolean correctlySpelled) {
    NamedList result = new NamedList();
    Map<Token, LinkedHashMap<String, Integer>> suggestions = spellingResult.getSuggestions();
    boolean hasFreqInfo = spellingResult.hasTokenFrequencyInfo();
    boolean hasSuggestions = false;
    boolean hasZeroFrequencyToken = false;
    for (Map.Entry<Token, LinkedHashMap<String, Integer>> entry : suggestions.entrySet()) {
        Token inputToken = entry.getKey();
        String tokenString = new String(inputToken.buffer(), 0, inputToken.length());
        Map<String, Integer> theSuggestions = new LinkedHashMap<String, Integer>(entry.getValue());
        Iterator<String> sugIter = theSuggestions.keySet().iterator();
        while (sugIter.hasNext()) {
            String sug = sugIter.next();
            if (sug.equals(tokenString)) {
                sugIter.remove();/*  w w  w  .j a  va  2 s .c om*/
            }
        }
        if (theSuggestions.size() > 0) {
            hasSuggestions = true;
        }
        if (theSuggestions != null && (theSuggestions.size() > 0 || shardRequest)) {
            SimpleOrderedMap suggestionList = new SimpleOrderedMap();
            suggestionList.add("numFound", theSuggestions.size());
            suggestionList.add("startOffset", inputToken.startOffset());
            suggestionList.add("endOffset", inputToken.endOffset());

            // Logical structure of normal (non-extended) results:
            // "suggestion":["alt1","alt2"]
            //
            // Logical structure of the extended results:
            // "suggestion":[
            // {"word":"alt1","freq":7},
            // {"word":"alt2","freq":4}
            // ]
            if (extendedResults && hasFreqInfo) {
                suggestionList.add("origFreq", spellingResult.getTokenFrequency(inputToken));

                ArrayList<SimpleOrderedMap> sugs = new ArrayList<SimpleOrderedMap>();
                suggestionList.add("suggestion", sugs);
                for (Map.Entry<String, Integer> suggEntry : theSuggestions.entrySet()) {
                    SimpleOrderedMap sugEntry = new SimpleOrderedMap();
                    sugEntry.add("word", suggEntry.getKey());
                    sugEntry.add("freq", suggEntry.getValue());
                    sugs.add(sugEntry);
                }
            } else {
                suggestionList.add("suggestion", theSuggestions.keySet());
            }

            if (hasFreqInfo) {
                int tokenFrequency = spellingResult.getTokenFrequency(inputToken);
                if (tokenFrequency == 0) {
                    hasZeroFrequencyToken = true;
                }
            }
            result.add(tokenString, suggestionList);
        }
    }

    if (extendedResults) {
        result.add("correctlySpelled", correctlySpelled);
    }
    return result;
}