Многоуровневый фасетный запрос в 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?


person jackthehipster    schedule 15.06.2018    source источник


Ответы (1)


Вы можете использовать Pivot Faceting:

&facet.pivot=datasource,mediatype

Это должно вернуть вам аналогичную структуру:

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

Вы также можете использовать 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
    }
  }
}
person MatsLindh    schedule 15.06.2018
comment
Никогда не слышал об огранке шарнира. Выдает именно то, что мне нужно! Также нужно будет повнимательнее взглянуть на json facet api. - person jackthehipster; 15.06.2018