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.MultiFields;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.index.Terms;
|
||||
import org.apache.lucene.search.FuzzyTermsEnum;
|
||||
import org.apache.lucene.search.BoostAttribute;
|
||||
import org.apache.lucene.search.MaxNonCompetitiveBoostAttribute;
|
||||
|
@ -395,7 +396,11 @@ public class DirectSpellChecker {
|
|||
AttributeSource atts = new AttributeSource();
|
||||
MaxNonCompetitiveBoostAttribute maxBoostAtt =
|
||||
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>();
|
||||
|
||||
BytesRef queryTerm = new BytesRef(term.text());
|
||||
|
|
|
@ -141,4 +141,25 @@ public class TestDirectSpellChecker extends LuceneTestCase {
|
|||
writer.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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,6 +136,20 @@ public class TestSpellChecker extends LuceneTestCase {
|
|||
compareSP.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 {
|
||||
String[] similar = spellChecker.suggestSimilar("fvie", 2);
|
||||
|
|
Loading…
Reference in New Issue