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

Michael Gibney commented on SOLR-13132:
---------------------------------------

Fair enough, perfectly fine to prefer consistency for allBuckets skg across 
sweep/non-sweep ... I hesitated to mention it, but did anyway.

I will add javadocs to the "Shim" class (sorry about that); but to briefly 
comment on the necessity to "shim" at all: the last merge from master 
introduced {{DEV_NULL_SLOT_ACC}}, which, not being an instance of 
{{SweepingCountSlotAcc}}, threw a {{ClassCastException}} on the hard cast in 
{{collectDocs()}} (in {{ByArrayUIF}} and {{ByArrayDV}}). This pointed to a more 
general problem, which was that if a subclass _were_ to set a {{countAcc}} that 
doesn't support sweeping, it would similarly throw {{ClassCastException}} on 
the hard cast in {{collectDocs()}}.

To support such a case, a shim is required because the code paths that do the 
actual count accumulation (in {{ByArrayUIF}} and {{ByArrayDV}}) used to 
directly increment {{processor.countAcc}}, and have now been switched to 
register counts via the {{SweepDocIterator}} and {{SweepDISI}} abstractions, 
respectively. So the goal of the "shim" is really just to construct one of 
those {{Sweep*}} objects, to use the same codepaths to accumulate counts into 
the non-sweep countAcc as a "sweep of one" -- it should be functionally 
identical to current master (which directly increments {{processor.countAcc}}).


> Improve JSON "terms" facet performance when sorted by relatedness 
> ------------------------------------------------------------------
>
>                 Key: SOLR-13132
>                 URL: https://issues.apache.org/jira/browse/SOLR-13132
>             Project: Solr
>          Issue Type: Improvement
>          Components: Facet Module
>    Affects Versions: 7.4, master (9.0)
>            Reporter: Michael Gibney
>            Priority: Major
>         Attachments: SOLR-13132-with-cache-01.patch, 
> SOLR-13132-with-cache.patch, SOLR-13132.patch, SOLR-13132_testSweep.patch
>
>          Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> When sorting buckets by {{relatedness}}, JSON "terms" facet must calculate 
> {{relatedness}} for every term. 
> The current implementation uses a standard uninverted approach (either 
> {{docValues}} or {{UnInvertedField}}) to get facet counts over the domain 
> base docSet, and then uses that initial pass as a pre-filter for a 
> second-pass, inverted approach of fetching docSets for each relevant term 
> (i.e., {{count > minCount}}?) and calculating intersection size of those sets 
> with the domain base docSet.
> Over high-cardinality fields, the overhead of per-term docSet creation and 
> set intersection operations increases request latency to the point where 
> relatedness sort may not be usable in practice (for my use case, even after 
> applying the patch for SOLR-13108, for a field with ~220k unique terms per 
> core, QTime for high-cardinality domain docSets were, e.g.: cardinality 
> 1816684=9000ms, cardinality 5032902=18000ms).
> The attached patch brings the above example QTimes down to a manageable 
> ~300ms and ~250ms respectively. The approach calculates uninverted facet 
> counts over domain base, foreground, and background docSets in parallel in a 
> single pass. This allows us to take advantage of the efficiencies built into 
> the standard uninverted {{FacetFieldProcessorByArray[DV|UIF]}}), and avoids 
> the per-term docSet creation and set intersection overhead.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to