Alessandro,

> facet: {booksCount:"unique(_root_)"}
is a pretty cool finding. it's what literally Elastic does in
"reverse-nested-aggregation". it's interesting how much it costs for
shards. I'll look deeper.
Thanks, Alessandro!
Yonik, JSON Facets rocks!

On Thu, Nov 12, 2015 at 1:25 PM, Alessandro Benedetti <abenede...@apache.org
> wrote:

> Hi Mikhail,
> how about this :
>
> json.facet={
>     top_reviewers: {
>         type: terms,
>         field: author_s,
>         sort: "booksCount desc",
>         facet: {
>             booksCount: "unique(_root_)"
>         }
>     }
> }
>
> We query on children ( comments) and we calculate that facets.
> This should satisfy your test requirement:
>
>
> http://localhost:8983/solr/demo/select?q=*:*&wt=json&indent=true&fl=id,comment_t&json.facet={top_reviewers
> :
> {type: terms,field: author_s,sort: "booksCount desc",facet: {booksCount:
> "unique(_root_)"}}}
>
> Example Response :
>
> "top_reviewers":{
>       "buckets":[{
>           "val":"dan",
>           "count":2,
>           "booksCount":2},
>         {
>           "val":"yonik",
>           "count":2,
>           "booksCount":2},
>         {
>           "val":"Brandon Sanderson",
>           "count":1,
>           "booksCount":1},
>         *{
>           "val":"Mary",
>           "count":2,
>           "booksCount":1}*
>
> ...
>
> Wondering which kind of scenarios can rise if we consider a multi-level
> hierarchy...
>
> Cheers
>
> On 11 November 2015 at 22:26, Mikhail Khludnev <mkhlud...@griddynamics.com
> >
> wrote:
>
> > I found that example has not enough data to reproduce this functionality.
> > what if Mary left the same comment to the same book (book2_c4), then we
> > search for th* across comments
> >
> >
> >
> http://localhost:8983/solr/techproducts/select?q=comment_t%3Ath*&wt=csv&indent=true&fl=author_s,comment_t,id
> >
> > and get
> >
> > author_s,comment_t,id
> > dan,This book was too long.,book1_c2
> > yonik,Ahead of its time... I wonder if it helped inspire The
> > Matrix?,book2_c1
> > dan,A pizza boy for the Mafia franchise? Really?,book2_c2
> > mary,Neal is so creative and detailed! Loved the metaverse!,book2_c3
> > mary,Neal is so creative and detailed! Loved the metaverse!,book2_c4
> >
> > then, I wish to calculate author facet, but count them in books
> > (rollup to parents)!
> >
> > dan(2) - commented both books
> > yonik(1) - only second one
> > *mary(1)*  - only second one, despite twice
> >
> > So, far I'm ablle only
> >
> >
> >
> localhost:8983/solr/techproducts/select?q=comment_t%3Ath*&wt=json&indent=true&fl=author_s,comment_t,id&json.facet={top_reviewers
> > : { type: terms, field: author_s}}
> >
> > "top_reviewers":{
> >       "buckets":[{
> >           "val":"dan",
> >           "count":2},
> >         {
> >           "val":"mary",
> >           "count":2},
> >         {
> >           "val":"yonik",
> >           "count":1}]}}}
> >
> > but it's comments mary(2), not books!
> >
> > Neither  domain: { blockParent : "type_s:book" } nor  domain: {
> > blockChildren : "type_s:book" } don't help.
> >
> > I tried to nest a facet with specifying a domain, it's just ignored
> >
> >
> localhost:8983/solr/techproducts/select?q=comment_t%3Ath*&wt=json&indent=true&fl=author_s,comment_t,id&json.facet={top_reviewers
> > : { type: terms, field: author_s, in_books : { type: terms, field:
> > author_s,  domain: { blockParent : \"type_s:book\" }}}}
> >
> >
> >
> >
> > On Wed, Nov 11, 2015 at 6:31 PM, Yonik Seeley <ysee...@gmail.com> wrote:
> >
> > > On Mon, Nov 9, 2015 at 2:37 PM, Mikhail Khludnev
> > > <mkhlud...@griddynamics.com> wrote:
> > > > Yonik,
> > > >
> > > > I wonder is there a plan or a vision for something like
> > > >
> > >
> >
> https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-reverse-nested-aggregation.html
> > > > under JSON facets?
> > >
> > > Hmmm, I couldn't quite grok that complicated command syntax... but the
> > > description seems straight-forward enough:
> > >
> > > "The following aggregations will return the top commenters' username
> > > that have commented and per top commenter the top tags of the issues
> > > the user has commented on:"
> > >
> > > So if I translate that into "books" and "reviews" that I use here:
> > > http://yonik.com/solr-nested-objects/
> > >
> > > it sounds like we start with a set of book objects, then map to the
> > > child domain to facet on comments, then map back to the parent domain
> > > to facet on books again.
> > >
> > > From that blog, this is the command that finds top review authors:
> > >
> > > json.facet={
> > >   top_reviewers : {
> > >     type: terms,
> > >     field: author_s,
> > >     domain: { blockChildren : "type_s:book" }
> > >   }
> > > }
> > >
> > > Now we just need to add a sub-facet that switches back to the parent
> > > domain to facet on something there (like genre... equiv to "tags" in
> > > the ES example):
> > >
> > > son.facet={
> > >   top_reviewers : {
> > >     type: terms,
> > >     field: author_s,
> > >     domain: { blockChildren : "type_s:book" },
> > >
> > >     facet : {
> > >       type:terms,
> > >       field:genre,
> > >       domain:{blockParent:"type_s:book"}
> > >     }
> > >
> > >   }
> > > }
> > >
> > >
> > >
> > > While there is certainly more work do be done with joins /
> > > block-joins, it seems like we can already do that specific example at
> > > least.
> > >
> > > -Yonik
> > >
> >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> > Principal Engineer,
> > Grid Dynamics
> >
> > <http://www.griddynamics.com>
> > <mkhlud...@griddynamics.com>
> >
>
>
>
> --
> --------------------------
>
> Benedetti Alessandro
> Visiting card : http://about.me/alessandro_benedetti
>
> "Tyger, tyger burning bright
> In the forests of the night,
> What immortal hand or eye
> Could frame thy fearful symmetry?"
>
> William Blake - Songs of Experience -1794 England
>



-- 
Sincerely yours
Mikhail Khludnev
Principal Engineer,
Grid Dynamics

<http://www.griddynamics.com>
<mkhlud...@griddynamics.com>

Reply via email to