[ 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