mirror of https://github.com/apache/lucene.git
LUCENE-3351: DirectSpellChecker throws NPE if field doesn't exist
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1152669 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2b7362de2b
commit
31e3b272c5
|
@ -28,6 +28,7 @@ import java.util.PriorityQueue;
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
import org.apache.lucene.index.MultiFields;
|
import org.apache.lucene.index.MultiFields;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
|
import org.apache.lucene.index.Terms;
|
||||||
import org.apache.lucene.search.FuzzyTermsEnum;
|
import org.apache.lucene.search.FuzzyTermsEnum;
|
||||||
import org.apache.lucene.search.BoostAttribute;
|
import org.apache.lucene.search.BoostAttribute;
|
||||||
import org.apache.lucene.search.MaxNonCompetitiveBoostAttribute;
|
import org.apache.lucene.search.MaxNonCompetitiveBoostAttribute;
|
||||||
|
@ -395,7 +396,11 @@ public class DirectSpellChecker {
|
||||||
AttributeSource atts = new AttributeSource();
|
AttributeSource atts = new AttributeSource();
|
||||||
MaxNonCompetitiveBoostAttribute maxBoostAtt =
|
MaxNonCompetitiveBoostAttribute maxBoostAtt =
|
||||||
atts.addAttribute(MaxNonCompetitiveBoostAttribute.class);
|
atts.addAttribute(MaxNonCompetitiveBoostAttribute.class);
|
||||||
FuzzyTermsEnum e = new FuzzyTermsEnum(MultiFields.getTerms(ir, term.field()).iterator(), atts, term, editDistance, Math.max(minPrefix, editDistance-1));
|
Terms terms = MultiFields.getTerms(ir, term.field());
|
||||||
|
if (terms == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
FuzzyTermsEnum e = new FuzzyTermsEnum(terms.iterator(), atts, term, editDistance, Math.max(minPrefix, editDistance-1));
|
||||||
final PriorityQueue<ScoreTerm> stQueue = new PriorityQueue<ScoreTerm>();
|
final PriorityQueue<ScoreTerm> stQueue = new PriorityQueue<ScoreTerm>();
|
||||||
|
|
||||||
BytesRef queryTerm = new BytesRef(term.text());
|
BytesRef queryTerm = new BytesRef(term.text());
|
||||||
|
|
|
@ -141,4 +141,25 @@ public class TestDirectSpellChecker extends LuceneTestCase {
|
||||||
writer.close();
|
writer.close();
|
||||||
dir.close();
|
dir.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBogusField() throws Exception {
|
||||||
|
DirectSpellChecker spellChecker = new DirectSpellChecker();
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
RandomIndexWriter writer = new RandomIndexWriter(random, dir,
|
||||||
|
new MockAnalyzer(random, MockTokenizer.SIMPLE, true));
|
||||||
|
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
Document doc = new Document();
|
||||||
|
doc.add(newField("numbers", English.intToEnglish(i), Field.Store.NO, Field.Index.ANALYZED));
|
||||||
|
writer.addDocument(doc);
|
||||||
|
}
|
||||||
|
|
||||||
|
IndexReader ir = writer.getReader();
|
||||||
|
|
||||||
|
SuggestWord[] similar = spellChecker.suggestSimilar(new Term("bogusFieldBogusField", "fvie"), 2, ir, false);
|
||||||
|
assertEquals(0, similar.length);
|
||||||
|
ir.close();
|
||||||
|
writer.close();
|
||||||
|
dir.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,6 +137,20 @@ public class TestSpellChecker extends LuceneTestCase {
|
||||||
compIdx.close();
|
compIdx.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBogusField() throws Exception {
|
||||||
|
IndexReader r = IndexReader.open(userindex, true);
|
||||||
|
Directory compIdx = newDirectory();
|
||||||
|
SpellChecker compareSP = new SpellCheckerMock(compIdx, new LevensteinDistance(), new SuggestWordFrequencyComparator());
|
||||||
|
addwords(r, compareSP, "field3");
|
||||||
|
|
||||||
|
String[] similar = compareSP.suggestSimilar("fvie", 2, r, "bogusFieldBogusField", false);
|
||||||
|
assertEquals(0, similar.length);
|
||||||
|
r.close();
|
||||||
|
if (!compareSP.isClosed())
|
||||||
|
compareSP.close();
|
||||||
|
compIdx.close();
|
||||||
|
}
|
||||||
|
|
||||||
private void checkCommonSuggestions(IndexReader r) throws IOException {
|
private void checkCommonSuggestions(IndexReader r) throws IOException {
|
||||||
String[] similar = spellChecker.suggestSimilar("fvie", 2);
|
String[] similar = spellChecker.suggestSimilar("fvie", 2);
|
||||||
assertTrue(similar.length > 0);
|
assertTrue(similar.length > 0);
|
||||||
|
|
Loading…
Reference in New Issue