Solr 中的多级分面查询

Multilevel facet query in Solr

我正在尝试从我们的 solr 服务器获取两级分面计数。文档如下所示(仅缩短为相关字段):

{
        "id":"100071F5",
        "datasource":"ABC",
        "mediatype":"ISSBD"
}

使用这样的查询...

http://localhost:8983/solr/select?wt=json&fl=id&indent=true&facet=true&facet.field=datasource&facet.field=mediatype

...我得到这样的结果:

    "facet_fields":{
      "datasource":[
        "ABC",75286,
        "DEF",47257],
      "mediatype":[
        "POSTCARD",75286,
        "RARE",12033,
        "MANUSCRIPT",9418,
        "BOOK",5849,
        "OTHER",4747,
        "UNKNOWN",2603,
        "MAP",1033,
        "GLOBE",704,
        "MIXED",13,
        "ISSUE",1]} ...

但我真正想要的是这样的:

"facet_fields":{
  "datasource":[
    "ABC",75286,
      "mediatype":[
        "POSTCARD",1234,
        "RARE",1,
        "BOOK",533,
        "OTHER",47],
  "DEF",47257,
      "mediatype":[
        "POSTCARD",7286,
        "RARE",1203,
        "MANUSCRIPT",918,
        "BOOK",549,
        "OTHER",4747,
        "UNKNOWN",2603,
        "MAP",1033,
        "GLOBE",704,
        "MIXED",13,
        "ISSUE",1]} ...

换句话说:我喜欢在一个字段上有一个方面,然后在另一个字段上为每个子结果提供一个子方面。这在 Solr 中可行吗?

您可以使用 Pivot Faceting:

&facet.pivot=datasource,mediatype

它应该给你一个类似的结构:

[{
  "field":"datasource",
  "value":"ABC",
  "count":75286,
  "pivot":[{
          "field":"mediatype",
          "value":"POSTCARD",
          "count":34919
    }, { .... 
  }]
}]

您还可以使用 the JSON Facet API 进行更详细的方面聚合和子方面。从上面的参考指南中采用的示例:

top_datasource:{
  type: terms,
  field: datasource,
  facet:{
    top_mediatype:{
      type: terms, // nested terms facet on author will be calculated for each parent bucket (datasource)
      field: mediatype
    }
  }
}