[
https://issues.apache.org/jira/browse/SOLR-9510?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dr Oleg Savrasov updated SOLR-9510:
-----------------------------------
Attachment: SOLR_9510.patch
Arpan Gupta has noticed that proposed approach differs from usual filter
exclusions. The problem is that eliminating child filters in facet queries
doesn't extend docSet of matched parent objects, it extends the set of child
objects in initial parent objects domain only. To extend parent objects domain,
we probably need to support similar definition, i.e.
domain: { blockChildren : type_s:book, excludeTags:stars }
This makes the syntax a bit more complicated, since same exclusions should be
mentioned both in domain (to extend docSet of matched parent objects) and facet
query (to extend the set of matched child objects).
The patch is reworked to support domain filter exclusions, please see
TestJsonFacetsWithNestedObjects.testDomainFilterExclusions test as a reference
to the new feature.
> child level facet exclusions
> ----------------------------
>
> Key: SOLR-9510
> URL: https://issues.apache.org/jira/browse/SOLR-9510
> Project: Solr
> Issue Type: Improvement
> Security Level: Public(Default Security Level. Issues are Public)
> Components: Facet Module, faceting, query parsers
> Reporter: Mikhail Khludnev
> Attachments: SOLR_9510.patch, SOLR_9510.patch, SOLR_9510.patch
>
>
> h2. Challenge
> * Since SOLR-5743 achieved block join child level facets with counts roll-up
> to parents, there is a demand for filter exclusions.
> h2. Context
> * Then, it's worth to consider JSON Facets as an engine for this
> functionality rather than support a separate component.
> * During a discussion in SOLR-8998 [a solution for block join with child
> level
> exclusion|https://issues.apache.org/jira/browse/SOLR-8998?focusedCommentId=15487095&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15487095]
> has been found.
>
> h2. Proposal
> It's proposed to provide a bit of syntax sugar to make it user friendly,
> believe it or not.
> h2. List of improvements
> * introducing a local parameter {{filters}} for {{\{!parent}} query parser
> referring to _multiple_ filters queries via parameter name: {{\{!parent
> filters=$child.fq ..}..&child.fq=color:Red&child.fq=size:XL}}
> these _filters_ are intersected with a child query supplied as a subordinate
> clause.
> * introducing {{\{!filters params=$child.fq excludeTags=color
> v=$subq}&subq=text:word&child.fq={!tag=color}color:Red&child.fq=size:XL}} it
> intersects a subordinate clause (here it's {{subq}} param, and the trick is
> to refer to the same query from {{\{!parent}}}), with multiple filters
> supplied via parameter name {{params=$child.fq}}, it also supports
> {{excludeTags}}.
> h2. Notes
> Regarding the latter parser, the alternative approach might be to move into
> {{domain:\{..}}} instruction of json facet. From the implementation
> perspective, it's desired to optimize with bitset processing, however I
> suppose it's might be deferred until some initial level of maturity.
> h2. Example
> {code}
> q={!parent which=type_s:book filters=$child.fq
> v=$childquery}&childquery=comment_t:good&child.fq={!tag=author}author_s:yonik&child.fq={!tag=stars}stars_i:(5
> 3)&wt=json&indent=on&json.facet={
> comments_for_author:{
> type:query,
> q:"{!filters params=$child.fq excludeTags=author v=$childquery}",
> "//note":"author filter is excluded",
> domain:{
> blockChildren:"type_s:book",
> "//":"applying filters here might be more promising"
> }, facet:{
> authors:{
> type:terms,
> field:author_s,
> facet: {
> in_books: "unique(_root_)"
> }
> }
> }
> } ,
> comments_for_stars:{
> type:query,
> q:"{!filters params=$child.fq excludeTags=stars v=$childquery}",
> "//note":"stars_i filter is excluded",
> domain:{
> blockChildren:"type_s:book"
> }, facet:{
> stars:{
> type:terms,
> field:stars_i,
> facet: {
> in_books: "unique(_root_)"
> }
> }
> }
> }
> }
> {code}
> Votes? Opinions?
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]