Hi Adrien, Thanks for looking into this! Here are more screenshots of the flamegraph. The original flamegraph HTMLs have stack traces from our app so I don't share it here. [image: Screenshot 2024-09-17 at 1.13.07 AM.png][image: Screenshot 2024-09-17 at 1.12.01 AM.png]
On Tue, Sep 17, 2024 at 1:00 AM Adrien Grand <jpou...@gmail.com> wrote: > Hello Rui, > > We actually released a change that should make MaxScoreBulkScorer faster > on dense disjunctions in 9.8: https://github.com/apache/lucene/pull/12444. > Your benchmark case is quite specific though as all clauses match all docs > and produce constant scores, so I would expect the scorer to quickly > realize that it can skip all documents once it's scored the first k docs. > This makes me wonder if it bottleneck on skipping blocks of documents > rather than on scoring them. Would you be able to share your whole flame > graph, it looks like it may be truncated a the top? > > On Mon, Sep 16, 2024 at 10:01 PM Rui Wu <rui...@mongodb.com> wrote: > >> Correction: The index has 3.6 million documents. >> >> On Mon, Sep 16, 2024 at 1:00 PM Rui Wu <rui...@mongodb.com> wrote: >> >>> Dear experts, >>> >>> In our Mongodb Atlas Search performance regression test between Lucene >>> 9.7 and Lucene 9.11, we detect a 43% latency regression in this query shape: >>> 12 SHOULD clause, and each clause matches all of the documents. Each >>> should clause is wrapped in ConstantScoreQuery. >>> >>> The index has 3.6 documents, and every document is identical: Every >>> document is {"path": ["1", "2", "3" ... "12"]} >>> The query shape is a BooleanQuery of SHOULD "1", SHOULD "2", ... SHOULD >>> "12". >>> >>> Our flamegraphs show that most of the time in search() is spent on >>> the MaxScoreBulkScorer class: >>> [image: image.png] >>> >>> We wonder if this extreme test case is expected to be slow on >>> MaxScoreBulkScorer? >>> >>> Thanks a lot! >>> >>> Rui Wu >>> Lead Engineer, MongoDB >>> >> > > -- > Adrien >