简体   繁体   中英

Solr faceting : compute "others" category

My SOLR application features faceting on a "descendant_path" field. The number of facet can be great (eg 100) and I don't find it useful. So I would better have X (eg 2) facets and an extra one labelled "others".

So far I have :

 - set an unlimited number of facets (with facet.limit = -1), 
 - sorted them in decreasing count (with facet.sort = count), 
 - taken the first X (eg 2) elements
 - added the counts of the next elements together to form the "others" count

because I could not find a Solr faceting parameter that could do that.

Consequently not to reinvent the wheel, I need to know if there is already a Solr parameter that can return the sum of all the facet counts that are not returned within the facet.limit ?

For example if Solr returns 5 facets with facet.limit = -1
A (34) B (30) C (28) D (10) E (4)

If now I set the facet.limit = 2 it will return A (34) B (30)

Is there a parameter that returns the sum of all the counts from the facets that are not included (ie counts of C, D and E together) => Others (42) ?

Please note : facet.missing did not do the trick since it deals with documents with missing category not document with missing facet.

Is there really no parameter to achieve my goal or I simply missed it ?

Any help appreciated

There is no built-in property other to give you this calculation.

However, it is easy to calculate, using the formula:

(numFound - sum(facet_counts)) - missing

In the following resultset:

{ 
   "responseHeader":{ 
      "zkConnected":true,
      "status":0,
      "QTime":39,
      "params":{ 
         "q":"post_content:term",
         "facet.field":"my_terms",
         "facet.missing":"true",
         "fq":"date:[2018-12-11T00:00:00Z TO 2019-12-10T23:59:59Z]",
         "facet.mincount":"3",
         "rows":"0",
         "facet":"true",
         "wt":"json"
      }
   },
   "response":{ 
      "numFound":3883,
      "start":0,
      "maxScore":10.545702,
      "docs":[ ..
      ]
   },
   "facet_counts":{ 
      "facet_fields":{ 
         "my_terms":{ 
            "someterm":59,
            "anotherterm":43,
            "yetanotherterm":55,
            "":323
         }
      },
   }
}

So we have:

(3883 - (59 + 43 + 55)) - 323 = 3403

Other = 3403

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM