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

David Smiley commented on SOLR-12407:
-------------------------------------

SOLR-13126 probably improved things but I think there is more to do.  I saw a 
problem and filed LUCENE-10252 which I think likely brings back the 
performance.  I didn't discover that doing performance analysis but I did 
discover the underlying score getting invoked twice, which can be expensive for 
some queries.

I suggest we close this issue after LUCENE-10252.

> edismax boost performance regression from switch to FunctionScoreQuery
> ----------------------------------------------------------------------
>
>                 Key: SOLR-12407
>                 URL: https://issues.apache.org/jira/browse/SOLR-12407
>             Project: Solr
>          Issue Type: Bug
>    Affects Versions: 7.3
>            Reporter: Will Currie
>            Priority: Minor
>         Attachments: restore-boosted-query.patch, solr-7.2.svg, solr-7.3.svg
>
>
> Assertion: FunctionScoreQuery uses the iterator style API (advanceExact + 
> doubleValue). BoostedQuery uses the "old" api (just a single call to 
> doubleValue). In an edismax boost this means the boost function is called 
> twice for every document being scored in 7.3 instead of once in 7.2.
> I'm seeing ~50% increase in query response time after upgrading from 7.2 to 
> 7.3 (600ms to 900ms). My queries use an edismax boost something like:
> {noformat}
> if(termfreq(type,"A"),product(map(field1,3,3,1.5,1),map(field1,4,4,1.9,1),if(def(field2,false),product(map(field1,1,1,0.6,1),map(field1,2,2,0.7,1),if(not(exists(field1)),0.6,1),map(field3,0,0,1.3,1)),product(map(field1,1,1,0.7,1),map(field1,2,2,1.1,1),if(not(exists(field1)),0.90,1),map(field3,0,0,1.50,1)))),1){noformat}
> This boost is likely (surely?) suboptimal but LUCENE-8099 appears to have 
> introduced this performance regression (poured proverbial oil on my 
> smouldering fire). If I change ExtendedDismaxQParser back to using the 
> deprecated BoostedQuery I get the 600ms solr 7.2 response time back.
> It appears FunctionScoreQuery invokes the boost function twice for each 
> document. Once with a call to 
> [exists()|https://github.com/apache/lucene-solr/blob/03afeb7766a39996de3c85e8a6ab24d2a352dd1c/lucene/queries/src/java/org/apache/lucene/queries/function/ValueSource.java#L150]
>  from 
> [advanceExact()|https://github.com/apache/lucene-solr/blob/42154387d4f2a6060da09c4236e2a8dbb575c59e/lucene/queries/src/java/org/apache/lucene/queries/function/FunctionScoreQuery.java#L170],
>  then a second time from the call chain following scores.doubleValue().
> I don't know if that's the cause of the slowdown but I'm definitely seeing a 
> slowdown that disappears when I revert part of LUCENE-8099.
> I've attached some flamegraphs comparing 7.2 and 7.3. The frame 
> FunctionScoreQuery$FunctionScoreWeight$1.score in solr-7.3.svg show 2 
> "towers". One for advanceExact (calling exists()), the other for 
> doubleValue() which ends up similar to solr-7.2.svg.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

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

Reply via email to