Can you open an issue, null should be handled like an empty DocIdSet? This seems to be a bug in CachingWrapperFilter.
To go around this, don’t return null, and instead return the constant DocIdSet.EMPTY_DOCIDSET. This is the preferable solution and maybe we will change this in Lucene 4.0, to not allow null as return value. ----- Uwe Schindler H.-H.-Meier-Allee 63, D-28213 Bremen http://www.thetaphi.de eMail: u...@thetaphi.de > -----Original Message----- > From: Daniel Noll [mailto:dan...@nuix.com] > Sent: Wednesday, May 26, 2010 8:57 AM > To: Lucene Java Users Mailing List > Subject: Filter.getDocIdSet() returning null, and what this means for > CachingWrapperFilter > > Hi all. > > We are seeing an exception like this: > > java.lang.NullPointerException > at > org.apache.lucene.search.CachingWrapperFilter.docIdSetToCache(CachingW > rapperFilter.java:84) > at > org.apache.lucene.search.CachingWrapperFilter.getDocIdSet(CachingWrapp > erFilter.java:112) > at > com.nuix.storage.search.LazyConstantScoreQuery$LazyFilterWrapper.getDo > cIdSet(SourceFile:91) > at > org.apache.lucene.search.ConstantScoreQuery$ConstantScorer.<init>(Const > antScoreQuery.java:116) > at > org.apache.lucene.search.ConstantScoreQuery$ConstantWeight.scorer(Con > stantScoreQuery.java:81) > at > org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQu > ery.java:297) > at > org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQu > ery.java:297) > at > org.apache.lucene.search.QueryWrapperFilter$2.iterator(QueryWrapperFilt > er.java:75) > > The class of our own is just an intermediary which delays creating the Filter > object... > > @Override > public DocIdSet getDocIdSet(IndexReader reader) throws IOException { > if (delegate == null) { > delegate = factory.createFilter(); > } > return delegate.getDocIdSet(reader); > } > > Tracing through the code in CachingWrapperFilter, I can see that this NPE > would occur if getDocIdSet() were to return null. > > The Javadoc on Filter says that null will be returned if no documents will be > accepted by the filter, but it doesn't seem that Lucene itself is handling > null > return values correctly, so which is correct? The code or the Javadoc? > Supposing that null really is OK, does this cause any problems with how > CachingWrapperFilter is implementing the caching? I notice it's calling get() > and then comparing against null so it wouldn't appear that it can distinguish > "the entry isn't in the cache" from "the entry is in the cache but it's null". > > Daniel > > > > -- > Daniel Noll Forensic and eDiscovery Software > Senior Developer The world's most advanced > Nuix email data analysis > http://nuix.com/ and eDiscovery software > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org > For additional commands, e-mail: java-user-h...@lucene.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org