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

Reply via email to