Timothy Allison created LUCENE-4477:
---------------------------------------
Summary: Boolean query composed of spanqueries can return
ArrayIndexOutOfBoundsException if one of the subqueries doesn't have a match
Key: LUCENE-4477
URL: https://issues.apache.org/jira/browse/LUCENE-4477
Project: Lucene - Core
Issue Type: Bug
Components: core/search
Affects Versions: 4.0-BETA
Environment: Windows 7
Reporter: Timothy Allison
Fix For: 4.0-BETA
When building a boolean query of two spanqueryies, if one of the spanqueries
does not have a hit, an ArrayIndexOutOfBoundsException is thrown.
This does not happen when building a boolean query of two TermQuery(ies), nor
does it happen if all of the terms have a hit.
@Test
public void testBooleanSpanQuery() {
boolean failed = false;
int hits = 0;
try{
CharArraySet stops = CharArraySet.EMPTY_SET;
Analyzer indexerAnalyzer = new
StandardAnalyzer(LuceneProjectVersion.LUCENE_VERSION, stops);
Directory directory = new RAMDirectory();
IndexWriterConfig config = new
IndexWriterConfig(LuceneProjectVersion.LUCENE_VERSION, indexerAnalyzer);
IndexWriter writer = new IndexWriter(directory, config);
String FIELD = "content";
Document d = new Document();
d.add(new TextField(FIELD, "clockwork orange",
Field.Store.YES));
writer.addDocument(d);
writer.close();
IndexReader indexReader =
DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(indexReader);
BooleanQuery query = new BooleanQuery();
SpanQuery sq1 = new SpanTermQuery(new Term(FIELD,
"clockwork"));
SpanQuery sq2 = new SpanTermQuery(new Term(FIELD,
"clckwork"));
query.add(sq1, BooleanClause.Occur.SHOULD);
query.add(sq2, BooleanClause.Occur.SHOULD);
TopScoreDocCollector collector =
TopScoreDocCollector.create(1000, true);
searcher.search(query, collector);
hits = collector.topDocs().scoreDocs.length;
for (ScoreDoc scoreDoc : collector.topDocs().scoreDocs){
System.out.println(scoreDoc.doc);
}
} catch (java.lang.ArrayIndexOutOfBoundsException e){
failed = true;
} catch (IOException e){
e.printStackTrace();
}
assertEquals("Bug in boolean query composed of span queries",
failed, false);
assertEquals("Bug in boolean query composed of span queries",
hits, 1);
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]