List of usage examples for org.apache.lucene.search.spell SuggestWord SuggestWord
public SuggestWord()
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)); }