Example usage for org.apache.lucene.search.spell SuggestWord SuggestWord

List of usage examples for org.apache.lucene.search.spell SuggestWord SuggestWord

Introduction

In this page you can find the example usage for org.apache.lucene.search.spell SuggestWord SuggestWord.

Prototype

public SuggestWord() 

Source Link

Document

Creates a new empty suggestion with null text.

Usage

From source file:org.apache.solr.handler.component.SpellCheckComponent.java

License:Apache License

@SuppressWarnings("unchecked")
private void collectShardSuggestions(NamedList nl, SpellCheckMergeData mergeData) {
    SpellCheckResponse spellCheckResp = new SpellCheckResponse(nl);
    for (SpellCheckResponse.Suggestion suggestion : spellCheckResp.getSuggestions()) {
        mergeData.origVsSuggestion.put(suggestion.getToken(), suggestion);
        HashSet<String> suggested = mergeData.origVsSuggested.get(suggestion.getToken());
        if (suggested == null) {
            suggested = new HashSet<String>();
            mergeData.origVsSuggested.put(suggestion.getToken(), suggested);
        }/*from   w  w  w  .  j a v  a  2  s.co  m*/

        // sum up original frequency          
        int origFreq = 0;
        Integer o = mergeData.origVsFreq.get(suggestion.getToken());
        if (o != null)
            origFreq += o;
        origFreq += suggestion.getOriginalFrequency();
        mergeData.origVsFreq.put(suggestion.getToken(), origFreq);

        //# shards reporting
        Integer origShards = mergeData.origVsShards.get(suggestion.getToken());
        if (origShards == null) {
            mergeData.origVsShards.put(suggestion.getToken(), 1);
        } else {
            mergeData.origVsShards.put(suggestion.getToken(), ++origShards);
        }

        // find best suggestions
        for (int i = 0; i < suggestion.getNumFound(); i++) {
            String alternative = suggestion.getAlternatives().get(i);
            suggested.add(alternative);
            SuggestWord sug = mergeData.suggestedVsWord.get(alternative);
            if (sug == null) {
                sug = new SuggestWord();
                mergeData.suggestedVsWord.put(alternative, sug);
            }
            sug.string = alternative;
            // alternative frequency is present only for extendedResults=true
            if (suggestion.getAlternativeFrequencies() != null
                    && suggestion.getAlternativeFrequencies().size() > 0) {
                Integer freq = suggestion.getAlternativeFrequencies().get(i);
                if (freq != null)
                    sug.freq += freq;
            }
        }
    }
}

From source file:org.apache.solr.spelling.DirectSolrSpellChecker.java

License:Apache License

@Override
public SpellingResult getSuggestions(SpellingOptions options) throws IOException {
    LOG.debug("getSuggestions: " + options.tokens);

    SpellingResult result = new SpellingResult();
    float accuracy = (options.accuracy == Float.MIN_VALUE) ? checker.getAccuracy() : options.accuracy;

    for (Token token : options.tokens) {
        String tokenText = token.toString();
        Term term = new Term(field, tokenText);
        int freq = options.reader.docFreq(term);
        int count = (options.alternativeTermCount != null && freq > 0) ? options.alternativeTermCount
                : options.count;/* w  w w  .  ja  v a2s.  c o m*/
        SuggestWord[] suggestions = checker.suggestSimilar(term, count, options.reader, options.suggestMode,
                accuracy);
        result.addFrequency(token, freq);

        // If considering alternatives to "correctly-spelled" terms, then add the
        // original as a viable suggestion.
        if (options.alternativeTermCount != null && freq > 0) {
            boolean foundOriginal = false;
            SuggestWord[] suggestionsWithOrig = new SuggestWord[suggestions.length + 1];
            for (int i = 0; i < suggestions.length; i++) {
                if (suggestions[i].string.equals(tokenText)) {
                    foundOriginal = true;
                    break;
                }
                suggestionsWithOrig[i + 1] = suggestions[i];
            }
            if (!foundOriginal) {
                SuggestWord orig = new SuggestWord();
                orig.freq = freq;
                orig.string = tokenText;
                suggestionsWithOrig[0] = orig;
                suggestions = suggestionsWithOrig;
            }
        }
        if (suggestions.length == 0 && freq == 0) {
            List<String> empty = Collections.emptyList();
            result.add(token, empty);
        } else {
            for (SuggestWord suggestion : suggestions) {
                result.add(token, suggestion.string, suggestion.freq);
            }
        }
    }
    return result;
}

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

License:Apache License

@Override
public SpellingResult getSuggestions(SpellingOptions options) throws IOException {

    LOG.debug("getSuggestions: " + options.tokens);
    // load the typos file if not loaded

    SpellingResult result = new SpellingResult();
    float accuracy = (options.accuracy == Float.MIN_VALUE) ? checker.getAccuracy() : options.accuracy;

    for (Token token : options.tokens) {
        String tokenText = token.toString();
        Term term = new Term(field, tokenText);
        int freq = options.reader.docFreq(term);
        int count = (options.alternativeTermCount != null && freq > 0) ? options.alternativeTermCount
                : options.count;//from  ww  w .j a  v a2 s  .  com
        SuggestWord[] suggestions = checker.suggestSimilar(term, count, options.reader, options.suggestMode,
                accuracy);
        result.addFrequency(token, freq);

        // Dice functionality: Allow also loading of a list of spelling corrections to apply in addition
        // to the standard functionality. This allows us to configure common typos to correct that may exceed the
        // max edit distance used by solr
        if (this.typosLoaded) {
            String normTokenText = normalize(tokenText);
            String match = this.mapTypos.get(normTokenText);
            if (match != null) {
                int matchFreq = options.reader.docFreq(new Term(field, match));
                // only ever suggest values that are in the index and more frequent
                // than the original word
                if (matchFreq > 0 && matchFreq > freq) {
                    result.add(token, match, matchFreq);
                }
            }
        }

        // If considering alternatives to "correctly-spelled" terms, then add the
        // original as a viable suggestion.
        if (options.alternativeTermCount != null && freq > 0) {
            boolean foundOriginal = false;
            SuggestWord[] suggestionsWithOrig = new SuggestWord[suggestions.length + 1];
            for (int i = 0; i < suggestions.length; i++) {
                if (suggestions[i].string.equals(tokenText)) {
                    foundOriginal = true;
                    break;
                }
                suggestionsWithOrig[i + 1] = suggestions[i];
            }
            if (!foundOriginal) {
                SuggestWord orig = new SuggestWord();
                orig.freq = freq;
                orig.string = tokenText;
                suggestionsWithOrig[0] = orig;
                suggestions = suggestionsWithOrig;
            }
        }
        if (suggestions.length == 0 && freq == 0) {
            List<String> empty = Collections.emptyList();
            result.add(token, empty);
        } else {
            for (SuggestWord suggestion : suggestions) {
                result.add(token, suggestion.string, suggestion.freq);
            }
        }
    }
    return result;
}

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

License:Apache License

@SuppressWarnings("unchecked")
private void collectShardSuggestions(NamedList nl, SpellCheckMergeData mergeData) {
    SpellCheckResponse spellCheckResp = new SpellCheckResponse(nl);
    for (SpellCheckResponse.Suggestion suggestion : spellCheckResp.getSuggestions()) {
        mergeData.origVsSuggestion.put(suggestion.getToken(), suggestion);
        HashSet<String> suggested = mergeData.origVsSuggested.get(suggestion.getToken());
        if (suggested == null) {
            suggested = new HashSet<String>();
            mergeData.origVsSuggested.put(suggestion.getToken(), suggested);
        }//from w ww  .j  a v a 2s.  c  o m

        // sum up original frequency
        int origFreq = 0;
        Integer o = mergeData.origVsFreq.get(suggestion.getToken());
        if (o != null)
            origFreq += o;
        origFreq += suggestion.getOriginalFrequency();
        mergeData.origVsFreq.put(suggestion.getToken(), origFreq);

        //# shards reporting
        Integer origShards = mergeData.origVsShards.get(suggestion.getToken());
        if (origShards == null) {
            mergeData.origVsShards.put(suggestion.getToken(), 1);
        } else {
            mergeData.origVsShards.put(suggestion.getToken(), ++origShards);
        }

        // find best suggestions
        for (int i = 0; i < suggestion.getNumFound(); i++) {
            String alternative = suggestion.getAlternatives().get(i);
            suggested.add(alternative);
            SuggestWord sug = mergeData.suggestedVsWord.get(alternative);
            if (sug == null) {
                sug = new SuggestWord();
                mergeData.suggestedVsWord.put(alternative, sug);
            }
            sug.string = alternative;
            // alternative frequency is present only for extendedResults=true
            if (suggestion.getAlternativeFrequencies() != null
                    && suggestion.getAlternativeFrequencies().size() > 0) {
                Integer freq = suggestion.getAlternativeFrequencies().get(i);
                if (freq != null)
                    sug.freq += freq;
            }
        }
    }
}

From source file:org.meresco.lucene.LuceneResponseToJsonTest.java

License:Open Source License

@Test
public void test() {
    LuceneResponse response = new LuceneResponse(2);
    response.addHit(new LuceneResponse.Hit("id1", 0.1f));
    response.addHit(new LuceneResponse.Hit("id2", 0.2f));
    LuceneResponse.DrilldownData dd = new DrilldownData("field");
    List<DrilldownData.Term> terms = new ArrayList<DrilldownData.Term>();
    terms.add(new DrilldownData.Term("value1", 1));
    DrilldownData.Term t = new DrilldownData.Term("value2", 5);
    t.subTerms = new ArrayList<DrilldownData.Term>();
    t.subTerms.add(new DrilldownData.Term("subValue2", 1));
    terms.add(t);/*from w  ww  . ja v a 2s  .c  om*/
    dd.terms = terms;
    response.drilldownData = new ArrayList<LuceneResponse.DrilldownData>();
    response.drilldownData.add(dd);

    response.times.put("facetTime", 12L);
    SuggestWord sug1 = new SuggestWord();
    sug1.string = "value";
    response.suggestions.put("valeu", new SuggestWord[] { sug1 });

    JsonObject jsonResponse = response.toJson();
    assertEquals(2, jsonResponse.getInt("total"));
    assertEquals(0, jsonResponse.getInt("queryTime"));

    JsonArray hits = jsonResponse.getJsonArray("hits");
    assertEquals(2, hits.size());
    assertEquals("id1", hits.getJsonObject(0).getString("id"));
    assertEquals(0.1, hits.getJsonObject(0).getJsonNumber("score").doubleValue(), 0.0001);
    assertEquals("id2", hits.getJsonObject(1).getString("id"));
    assertEquals(0.2, hits.getJsonObject(1).getJsonNumber("score").doubleValue(), 0.0001);

    JsonArray ddData = jsonResponse.getJsonArray("drilldownData");
    assertEquals(1, ddData.size());
    assertEquals("field", ddData.getJsonObject(0).getString("fieldname"));
    assertEquals(0, ddData.getJsonObject(0).getJsonArray("path").size());
    JsonArray ddTerms = ddData.getJsonObject(0).getJsonArray("terms");
    assertEquals("value1", ddTerms.getJsonObject(0).getString("term"));
    assertEquals(1, ddTerms.getJsonObject(0).getInt("count"));
    JsonArray subterms = ddTerms.getJsonObject(0).getJsonArray("subterms");
    assertEquals(null, subterms);
    JsonArray subterms2 = ddTerms.getJsonObject(1).getJsonArray("subterms");
    assertEquals(1, subterms2.size());
    assertEquals("subValue2", subterms2.getJsonObject(0).getString("term"));
    assertEquals(1, subterms2.getJsonObject(0).getInt("count"));

    JsonObject times = jsonResponse.getJsonObject("times");
    assertEquals(1, times.size());
    assertEquals(12L, times.getJsonNumber("facetTime").longValue());

    JsonObject suggestions = jsonResponse.getJsonObject("suggestions");
    assertEquals(1, suggestions.size());
    JsonArray suggestionsValeu = suggestions.getJsonArray("valeu");
    assertEquals(1, suggestionsValeu.size());
    assertEquals("value", suggestionsValeu.getString(0));
}