[
https://issues.apache.org/jira/browse/LUCENE-5796?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Robert Muir resolved LUCENE-5796.
---------------------------------
Resolution: Fixed
Fix Version/s: 4.10
5.0
Thanks Terry!
> Scorer.getChildren() can throw or hide a subscorer for some boolean queries
> ---------------------------------------------------------------------------
>
> Key: LUCENE-5796
> URL: https://issues.apache.org/jira/browse/LUCENE-5796
> Project: Lucene - Core
> Issue Type: Bug
> Components: core/search
> Affects Versions: 4.9
> Reporter: Terry Smith
> Priority: Minor
> Fix For: 5.0, 4.10
>
> Attachments: LUCENE-5796.patch
>
>
> I've isolated two example boolean queries that don't behave with release 4.9
> of Lucene.
> # A BooleanQuery with three SHOULD clauses and a minimumNumberShouldMatch of
> 2 will throw an ArrayIndexOutOfBoundsException.
> {noformat}
> java.lang.ArrayIndexOutOfBoundsException: 2
> at
> __randomizedtesting.SeedInfo.seed([2F79B3DF917D071B:2539E6DBC4DF793C]:0)
> at
> org.apache.lucene.search.MinShouldMatchSumScorer.getChildren(MinShouldMatchSumScorer.java:119)
> at
> org.apache.lucene.search.TestBooleanQueryVisitSubscorers$ScorerSummarizingCollector.summarizeScorer(TestBooleanQueryVisitSubscorers.java:261)
> at
> org.apache.lucene.search.TestBooleanQueryVisitSubscorers$ScorerSummarizingCollector.setScorer(TestBooleanQueryVisitSubscorers.java:238)
> at
> org.apache.lucene.search.Weight$DefaultBulkScorer.score(Weight.java:161)
> at
> org.apache.lucene.search.AssertingBulkScorer.score(AssertingBulkScorer.java:64)
> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:621)
> at
> org.apache.lucene.search.AssertingIndexSearcher.search(AssertingIndexSearcher.java:94)
> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:309)
> at
> org.apache.lucene.search.TestBooleanQueryVisitSubscorers.testGetChildrenMinShouldMatchSumScorer(TestBooleanQueryVisitSubscorers.java:196)
> {noformat}
> # A BooleanQuery with two should clauses, one of which is a miss for all
> documents in the current segment will accidentally mask the scorer that was a
> hit.
> Unit tests and patch based on {{branch_4x}} are available and will be
> attached as soon as this ticket has a number.
> They are immediately available on GitHub on branch
> [shebiki/bqgetchildren|https://github.com/shebiki/lucene-solr/commits/bqgetchildren]
> as commit
> [c64bb6f|https://github.com/shebiki/lucene-solr/commit/c64bb6f2df8f33dd8daafc953d9c27b5cbf29fa3].
> I took the liberty of naming the relationship in BoostingScorer.getChildren()
> {{BOOSTING}}. Suspect someone will offer a better name for this. Here is a
> summary of the various relationships in play for all Scorer.getChildren()
> implementations on {{branch_4x}} to help choose.
> || class ||
> relationships
> | org.apache.lucene.search.AssertingScorer |
> SHOULD
> | org.apache.lucene.search.join.ToParentBlockJoinQuery.BlockJoinScorer |
> BLOCK_JOIN
> | org.apache.lucene.search.ConjunctionScorer | MUST
> | org.apache.lucene.search.ConstantScoreQuery.ConstantScorer |
> constant
> | org.apache.lucene.queries.function.BoostedQuery.CustomScorer |
> CUSTOM
> | org.apache.lucene.queries.CustomScoreQuery.CustomScorer |
> CUSTOM
> | org.apache.lucene.search.DisjunctionScorer |
> SHOULD
> | org.apache.lucene.facet.DrillSidewaysScorer.FakeScorer | MUST
> | org.apache.lucene.search.FilterScorer |
> calls in.getChildren()
> | org.apache.lucene.search.ScoreCachingWrappingScorer |
> CACHED
> | org.apache.lucene.search.FilteredQuery.LeapFrogScorer |
> FILTERED
> | org.apache.lucene.search.MinShouldMatchSumScorer |
> SHOULD
> | org.apache.lucene.search.FilteredQuery |
> FILTERED
> | org.apache.lucene.search.ReqExclScorer | MUST
> | org.apache.lucene.search.ReqOptSumScorer |
> MUST, SHOULD
> | org.apache.lucene.search.join.ToChildBlockJoinQuery |
> BLOCK_JOIN
> I also removed FilterScorer.getChildren() to prevent mistakes and force
> subclasses to provide a correct implementation.
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]