[ 
https://issues.apache.org/jira/browse/LUCENE-9762?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17283522#comment-17283522
 ] 

David Smiley commented on LUCENE-9762:
--------------------------------------

I filed a PR with a fix.  The problem is actually not QueryValueSource's use of 
TwoPhaseIterator.  That change increased the scenarios in which a _pre-existing 
bug_ in FunctionScoreQuery's score() method is exposed.  It's valid for a 
Scorer's score() method to be called more than once, but FSQ's score() was 
calling a DoubleValues.advanceExact which is intolerant of that by contract.  
Many implementations allow it nevertheless but not QueryValueSource when the 
wrapped query is a PhraseQuery or perhaps some other TPI based queries.  This 
bug was a tricky puzzle to track down!

CC [~romseygeek] as you introduced FunctionScoreQuery.

> FunctionScoreQuery can fail when the score is requested twice
> -------------------------------------------------------------
>
>                 Key: LUCENE-9762
>                 URL: https://issues.apache.org/jira/browse/LUCENE-9762
>             Project: Lucene - Core
>          Issue Type: Bug
>    Affects Versions: 8.8
>            Reporter: Chris M. Hostetter
>            Assignee: David Smiley
>            Priority: Major
>         Attachments: LUCENE-9762.patch
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> As originally reported by Nicolás Lichtmaier on the java-user list, there are 
> some trivial situations which can trigger an assertion error in the 
> PostingsReader when enumerating PhrasePositions for a sloppy PhraseQuery...
> {noformat}
> Exception in thread "main" java.lang.AssertionError
>       at 
> org.apache.lucene.codecs.lucene84.Lucene84PostingsReader$EverythingEnum.nextPosition(Lucene84PostingsReader.java:940)
>       at 
> org.apache.lucene.search.PhrasePositions.nextPosition(PhrasePositions.java:57)
>       at 
> org.apache.lucene.search.PhrasePositions.firstPosition(PhrasePositions.java:46)
>       at 
> org.apache.lucene.search.SloppyPhraseMatcher.initSimple(SloppyPhraseMatcher.java:368)
>       at 
> org.apache.lucene.search.SloppyPhraseMatcher.initPhrasePositions(SloppyPhraseMatcher.java:356)
>       at 
> org.apache.lucene.search.SloppyPhraseMatcher.reset(SloppyPhraseMatcher.java:153)
>       at org.apache.lucene.search.PhraseScorer$1.matches(PhraseScorer.java:49)
>       at 
> org.apache.lucene.search.DoubleValuesSource$WeightDoubleValuesSource$1.advanceExact(DoubleValuesSource.java:631)
>       at 
> org.apache.lucene.queries.function.FunctionScoreQuery$QueryBoostValuesSource$1.advanceExact(FunctionScoreQuery.java:343)
>       at 
> org.apache.lucene.search.DoubleValues$1.advanceExact(DoubleValues.java:53)
>       at 
> org.apache.lucene.search.DoubleValues$1.advanceExact(DoubleValues.java:53)
>       at 
> org.apache.lucene.queries.function.FunctionScoreQuery$MultiplicativeBoostValuesSource$1.advanceExact(FunctionScoreQuery.java:270)
>       at 
> org.apache.lucene.queries.function.FunctionScoreQuery$FunctionScoreWeight$1.score(FunctionScoreQuery.java:228)
>       at 
> org.apache.lucene.search.DoubleValuesSource$2.doubleValue(DoubleValuesSource.java:344)
>       at 
> org.apache.lucene.search.DoubleValues$1.doubleValue(DoubleValues.java:48)
>       at 
> org.apache.lucene.queries.function.FunctionScoreQuery$MultiplicativeBoostValuesSource$1.doubleValue(FunctionScoreQuery.java:265)
>       at 
> org.apache.lucene.queries.function.FunctionScoreQuery$FunctionScoreWeight$1.score(FunctionScoreQuery.java:229)
>       at 
> org.apache.lucene.search.TopScoreDocCollector$SimpleTopScoreDocCollector$1.collect(TopScoreDocCollector.java:76)
>       at 
> org.apache.lucene.search.Weight$DefaultBulkScorer.scoreAll(Weight.java:276)
>       at 
> org.apache.lucene.search.Weight$DefaultBulkScorer.score(Weight.java:232)
>       at org.apache.lucene.search.BulkScorer.score(BulkScorer.java:39)
>       at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:659)
>       at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:443)
>       at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:572)
>       at 
> org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:419)
>       at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:430)
>       at LuceneCrash.main(LuceneCrash.java:51)
> {noformat}
> http://mail-archives.apache.org/mod_mbox/lucene-java-user/202102.mbox/%3C177a65ec-5ec3-e1aa-99c3-b478e165d5e8%40wolfram.com%3E



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to