[
https://issues.apache.org/jira/browse/LUCENE-3446?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Uwe Schindler updated LUCENE-3446:
----------------------------------
Attachment: LUCENE-3446.patch
Patch for trunk.
This patch handles filters returning null DocIdSet and also those returning
null DISIs (like QueryWrapperFilter when scorer==null). I also added tests for
all combinations.
This patch also optimized the filter building, as getDocIdSet is not called
unnecessarily twice (which is expensive for lots of filters).
I added a TODO: The Filter uses OpenBitSet and has optimizations for
OpenBitSets that no longer apply to Lucene core's filters: Core filters mostly
return FixedBitSet now. A move to FixedBitSet for BooleanFilter is not possible
at the moment, as and() and andNot() are missing in this class.
> NullPointerException in BooleanFilter
> --------------------------------------
>
> Key: LUCENE-3446
> URL: https://issues.apache.org/jira/browse/LUCENE-3446
> Project: Lucene - Java
> Issue Type: Bug
> Components: modules/other
> Affects Versions: 3.4
> Reporter: Shuji Umino
> Assignee: Uwe Schindler
> Priority: Minor
> Attachments: LUCENE-3446.patch
>
>
> BooleanFilter getDISI() method used with QueryWrapperFilter occur
> NullPointerException,
> if any QueryWrapperFilter not match terms in IndexReader.
> ---------------------------------------------------
> java.lang.NullPointerException
> at
> org.apache.lucene.util.OpenBitSetDISI.inPlaceAnd(OpenBitSetDISI.java:66)
> at
> org.apache.lucene.search.BooleanFilter.getDocIdSet(BooleanFilter.java:102)
> at
> org.apache.lucene.search.IndexSearcher.searchWithFilter(IndexSearcher.java:551)
> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:532)
> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:463)
> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:433)
> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:356)
> at test.BooleanFilterTest.main(BooleanFilterTest.java:50)
> ---------------------------------------------------
> null-check below lines.
> ---------------------------------------------------
> res = new OpenBitSetDISI(getDISI(shouldFilters, i, reader), reader.maxDoc());
> res.inPlaceOr(getDISI(shouldFilters, i, reader));
> res = new OpenBitSetDISI(getDISI(notFilters, i, reader), reader.maxDoc());
> res.inPlaceNot(getDISI(notFilters, i, reader));
> res = new OpenBitSetDISI(getDISI(mustFilters, i, reader), reader.maxDoc());
> res.inPlaceAnd(getDISI(mustFilters, i, reader));
> ---------------------------------------------------
--
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]