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

Michael Gibney commented on SOLR-16162:
---------------------------------------

Sure!: currently FilterQuery consults the filterCache on the backend, but 
doesn't expose the cached DocSet directly. Rather, it returns a {{Weight}} 
derived from DocSet.makeQuery().createWeight(), and the weight returns Scorers 
over individual segment LeafReaderContexts. The scorers are then used (via 
{{DocSetUtil.createDocSetGeneric()}}) to iterate through matching docs (in the 
usual way, as against a "normal" query), collecting into an entirely new 
one-off DocSet built via DocSetCollector.

So basically you have a (cached) underlying DocSet, forced through the 
Weight/Scorer abstraction to build an entirely new DocSet that's equivalent to 
the original underlying DocSet, for every request. The goal of this PR is to 
provide a way to bypass the Weight/Scorer abstraction where possible and just 
directly use the single cached DocSet instance.

> FilterQuery (`filter([some_query])`) should implement DocSetProducer
> --------------------------------------------------------------------
>
>                 Key: SOLR-16162
>                 URL: https://issues.apache.org/jira/browse/SOLR-16162
>             Project: Solr
>          Issue Type: Improvement
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: query parsers
>    Affects Versions: main (10.0)
>            Reporter: Michael Gibney
>            Assignee: Michael Gibney
>            Priority: Minor
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> There is a substantial practical reason for FilterQuery to implement 
> DocSetProducer: the way FilterQuery works, it only consults the cache 
> internally for the backing query; the cache is never directly consulted for 
> the FilterQuery _per se_. As a consequence, when FilterQuery is used in a 
> context that wants a DocSet, currently (without implementing DocSetProducer), 
> a full clone of the cached DocSet must always be built via the Weight 
> returned by FilterQuery.createWeight(). Implementing DocSetProducer allows to 
> avoid superfluous DocSet creation.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

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

Reply via email to