Hi Mikhail, Thank you for your clarification. It has been really useful. I understood what my problem was. I used the debugger adding a breakpoint in the method get() of the CaffeineCache. The execution was blocked only when the flag useFilterCache == true. So, the breakpoint not hit plus the name of the flag useFilterCache, lead me to think that the searcher doesn't use the filterCache if useFilterCache == false. Digging more into the code, it turned out that the call getProcessedFilter hits the filterCache by calling the method computeIfAbsent(). I'll be writing a new blog post about caches in Solr with the main focus on filterCache. Hopefully, other people may take advantage of my studies.
Thanks again, Daniele Il giorno lun 3 gen 2022 alle ore 21:48 Mikhail Khludnev <[email protected]> ha scritto: > Daniele, > if !useFilterCache > DocSet qDocSet = getDocListAndSetNC(qr, cmd); > https://github.com/apache/solr/blob/c2db3a943e665cfb39e9ea53640be40cf2c09fbc/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java#L1420 > which calls getProcessedFilter() that hits FilterCache as you expect. > > On Mon, Jan 3, 2022 at 10:11 PM Daniele Antuzi <[email protected]> > wrote: > >> Hi Mikhail, >> Thanks for your reply. >> Probably I wasn't clear enough, actually, in the piece of code I pointed >> out >> <https://github.com/apache/solr/blob/c2db3a943e665cfb39e9ea53640be40cf2c09fbc/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java#L1387-L1398>, >> the searcher decides whether to use (or not use) the filterCache by setting >> the boolean *useFilterCache*. >> >> The searcher will use the filterCache in the search only if >> >> - the filterCache exists >> - AND the flags *GET_SCORES* and *NO_CHECK_FILTERCACHE* are not set >> - AND the parameter *useFilterForSortedQuery* is true (by default is >> false and I don't really understand why) >> - AND the sort is not null >> - AND none of the sort clause contains the score >> >> If I don't mistaken, if the sort is null the resultset is sorted by the >> score. >> So, if the resultset is sorted implicitly or explicitly by score, the >> searcher does not use the filterCache. Does everyone know why? >> >> >> >> Il giorno lun 3 gen 2022 alle ore 16:50 Mikhail Khludnev <[email protected]> >> ha scritto: >> >>> Hi, Adrien. Thanks for forwarding this. >>> Daniele, you pointed to the code which bypasses Lucene searching and >>> just sorts cached docset. >>> Applying filter before searching is done by getProcessedFilter() >>> https://github.com/apache/solr/blob/c2db3a943e665cfb39e9ea53640be40cf2c09fbc/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java#L956 >>> >>> Happy New Year! >>> >>> On Mon, Jan 3, 2022 at 5:12 PM Adrien Grand <[email protected]> wrote: >>> >>>> Hi Daniele, >>>> >>>> This is the Lucene dev list, I'm redirecting your question to >>>> [email protected]. >>>> >>>> On Fri, Dec 31, 2021 at 5:35 PM Daniele Antuzi < >>>> [email protected]> wrote: >>>> > >>>> > Hi, >>>> > I was taking a look at the Solr searcher to see how the filterCache >>>> is used: >>>> https://github.com/apache/solr/blob/c2db3a943e665cfb39e9ea53640be40cf2c09fbc/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java#L1379-L1398 >>>> > Reading the code, it turned out that the filterCache is not used if >>>> the sort contains the score or if we don't have any score specified (by >>>> default, it sorts by score). >>>> > As far as I know, the filterCache contains an unordered set of >>>> documents so the sort must be calculated after the application of the >>>> filter query. >>>> > Then, also the score should be computed after the filter query to >>>> have a smaller set of documents. >>>> > That being said, I don't understand why Solr does not use the >>>> filterCache if the score is somehow involved in the sort. >>>> > In theory, it can >>>> > >>>> > apply the filter query reducing the number of result >>>> > computes the score >>>> > sort the results >>>> > >>>> > Am I missing something? >>>> > >>>> > Happy new year, >>>> > Daniele >>>> > >>>> >>>> >>>> -- >>>> Adrien >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [email protected] >>>> For additional commands, e-mail: [email protected] >>>> >>>> >>> >>> -- >>> Sincerely yours >>> Mikhail Khludnev >>> >> > > -- > Sincerely yours > Mikhail Khludnev >
