QueryWrapperFilter gets null DocIdSetIterator when wrapping TermQuery
---------------------------------------------------------------------
Key: LUCENE-3442
URL: https://issues.apache.org/jira/browse/LUCENE-3442
Project: Lucene - Java
Issue Type: Bug
Components: core/search
Affects Versions: 3.4
Environment: java 1.6.0_27
Reporter: Dan
Priority: Minor
If you try to get the iterator for the DocIdSet returned by a
QueryWrapperFilter which wraps a TermQuery you get null instead of an iterator
that returns the same documents as the search on the TermQuery.
Code demonstrating the issue:
import java.io.IOException;
import org.apache.lucene.analysis.WhitespaceAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
public class TestQueryWrapperFilterIterator {
public static void main(String[] args) {
try {
IndexWriterConfig iwconfig = new
IndexWriterConfig(Version.LUCENE_34, new WhitespaceAnalyzer(Version.LUCENE_34));
iwconfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
RAMDirectory dir = new RAMDirectory();
IndexWriter writer = new IndexWriter(dir, iwconfig);
Document d = new Document();
d.add(new Field("id", "1001", Store.YES,
Index.NOT_ANALYZED));
d.add(new Field("text", "headline one group one",
Store.YES, Index.ANALYZED));
d.add(new Field("group", "grp1", Store.YES,
Index.NOT_ANALYZED));
writer.addDocument(d);
writer.commit();
writer.close();
IndexReader rdr = IndexReader.open(dir);
IndexSearcher searcher = new IndexSearcher(rdr);
TermQuery tq = new TermQuery(new Term("text",
"headline"));
TopDocs results = searcher.search(tq, 5);
System.out.println("Number of search results: " +
results.totalHits);
Filter f = new QueryWrapperFilter(tq);
DocIdSet dis = f.getDocIdSet(rdr);
DocIdSetIterator it = dis.iterator();
if (it != null) {
int docId = it.nextDoc();
while (docId != DocIdSetIterator.NO_MORE_DOCS) {
Document doc = rdr.document(docId);
System.out.println("Iterator doc: " +
doc.get("id"));
docId = it.nextDoc();
}
} else {
System.out.println("Iterator was null: ");
}
searcher.close();
rdr.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
--
This message is automatically generated by JIRA.
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]