Hi, David and Joel.
It took a while. I kicked tires a little
https://github.com/apache/solr/pull/623
I introduced {!join cacheEventually=true} param. It yields false positive
JoinQueries (ignores fromCore timestamp), and backed on docsets reside in
the user cache.
Cache listener doesn't suit for this purpose - fresh "from" searcher isn't
available for refreshing queries. So, I made it work with special update
processor which registered at inventory ("from") core and refreshes user
cache of "to" searcher with regenerator.warm.
You know, it's even work passing a simple test.
Here's the bummer q=*:*&fq={!join cacheEventually=true fromCore=inventory
..}.. if it's cached in query result cache, and commit into main index
starts to warm query result cache with a new "to" searcher, and it picks up
old searcher doc set. Boom. Presumably it can worked around by
q={!cache=false}... or disabling query result cache, but it seems not so
elegant, as I thought.

On Mon, Dec 20, 2021 at 4:09 AM Joel Bernstein <joels...@gmail.com> wrote:

> The second approach (newSearcher listener) is a nice approach if the
> filter cache is too full to rely on auto-warming.
> Static warming queries fail on cross core joins but I believe succeed on a
> self core join. So you could move the inventory into the same core and use
> a static warming query. The downside to this is the pollution of the main
> index with ever changing inventory segments.
>
>
>
>
>
>
>
>
>
> Joel Bernstein
> http://joelsolr.blogspot.com/
>
>
> On Sun, Dec 19, 2021 at 6:10 PM David Smiley <dsmi...@apache.org> wrote:
>
>> I'm not sure there is a clean/simple solution to this specific problem.
>> But I could imagine a more general & simple feature that could solve this
>> scenario, with just a bit more work by the user.
>>
>> Imagine an optional cache-key on ExtendedQuery auto-parsed, perhaps with
>> local-param "cacheKey".  It would wrap any Query with one having a special
>> equals & hashcode on this key.  Solr wouldn't parse the string for
>> this query so long as it can look it up in a special cache of these.  That
>> special cache would be Map<String,Query> with weak values such that if it's
>> not used anymore (e.g. not in the filter cache), it would be GC'ed.  This
>> would be useful for expensive queries that might resolve from some
>> network location (e.g. access control filters that refer to data in
>> who-knows-where).  So that's useful on its own but doesn't solve your
>> conundrum.  Then, imagine some new request handler that allows you to
>> provide this key & query and have it perform a filter cache save,
>> overwriting whatever entry that may have been there.  You could even do
>> this in a newSearcher event on the inventory core, calling into the primary
>> product core.
>>
>> ~ David Smiley
>> Apache Lucene/Solr Search Developer
>> http://www.linkedin.com/in/davidwsmiley
>>
>>
>> On Tue, Dec 14, 2021 at 4:24 PM Mikhail Khludnev <m...@apache.org> wrote:
>>
>>> Hello, Colleagues.
>>> I want to discuss one frequent usecase: inventory updates.
>>> Let's say we can't reindex docs when inventory numbers updated. We can
>>> put inventory in separate index, and apply fq={!join ..
>>> fromIndex=inventory}left:(0 TO *]. Once it's cached in main index filter
>>> cache it gets a good response time. We can even shard main collection, but
>>> keep inventory single shard. Ok.
>>> The sad moment occurs when commit goes into inventory core, after
>>> searcher is refreshed it's going to be cache misses on those inventory
>>> queries, and many of them go into new inventory searcher. That's not good.
>>> I can think of two workarounds:
>>>  - relax {!join} equality regarding fromIndex timestamp, so for some
>>> time it will be outdated inventory, but it's ok. And then we need to
>>> somehow, evict, invalidate, regenerate inventory filter
>>>  - newSearcher listener in inventory core can introspect main core cache
>>> entries find {!join .. fromIndex=inventory}... regenerate and insert
>>> results.
>>> I'm afraid to think about queryResult cache.
>>>
>>> Is it worth to have something like this in Solr distro?
>>>
>>> --
>>> Sincerely yours
>>> Mikhail Khludnev
>>>
>>

-- 
Sincerely yours
Mikhail Khludnev

Reply via email to