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
>

Reply via email to