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

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

Introduction

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

Prototype

public boolean hasTokenFrequencyInfo() 

Source Link

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.  co  m
            }
        }
        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;
}