You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Robert Muir (JIRA)" <ji...@apache.org> on 2014/07/02 14:01:29 UTC
[jira] [Commented] (LUCENE-5796) Scorer.getChildren() can throw or
hide a subscorer for some boolean queries
[ https://issues.apache.org/jira/browse/LUCENE-5796?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14049850#comment-14049850 ]
Robert Muir commented on LUCENE-5796:
-------------------------------------
I don't think we should remove the default implementation for FilterScorer, as the scorer is not really changed when using this abstract class, its just wrapped? For the same reason, i think the boostingscorer (since its just an implementation detail of how the current BS2 stuff solves this case) should be transparent.
> 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
> 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: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org