lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Uwe Schindler" <...@thetaphi.de>
Subject RE: Filter.getDocIdSet() returning null, and what this means for CachingWrapperFilter
Date Wed, 26 May 2010 07:40:31 GMT
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: uwe@thetaphi.de

> -----Original Message-----
> From: Daniel Noll [mailto:daniel@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-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Mime
View raw message