Обработка данных facet.pivot в Solr/Python

Я запрашиваю ядро ​​Solr с этим URL-адресом:

select?q=*:*&rows=0&facet=on&facet.limit=-1&facet.mincount=0&facet.pivot=brand,series,sub_series

Использование функции Facet Pivot

Частичный ответ JSON, обратите внимание, как правильно вложены поля:

"facet_pivot":{
  "brand,series,sub_series":[{
      "field":"brand",
      "value":"A. Lange & Sohne",
      "count":69,
      "pivot":[{
          "field":"series",
          "value":"1815 Manual Wind",
          "count":1},
        {
          "field":"series",
          "value":"1815 Up Down",
          "count":1},
        {
          "field":"series",
          "value":"Datograph",
          "count":3,
          "pivot":[{
              "field":"sub_series",
              "value":"Perpetual",
              "count":2},
            {
              "field":"sub_series",
              "value":"Up Down",
              "count":1}]},

Теперь я повторяю тот же запрос с помощью pySolr:

def nested_navbar():
    result = solr.search('*:*', **{
        'rows': '0',
        'facet': 'on',
        'facet.limit': '-1',
        'facet.mincount': '0',
        'facet.pivot': ['brand_exact', 'series_exact', 'sub_series_exact']
        })

    result = result.facets['facet_pivot']
    return result

По какой-то причине, когда я печатаю данные (шаблоны pdb или Django), словарь в результате имеет 3 разных массива для брендов, серий и подсерий без исходной вложенности. Другими словами, опорное поле исчезло.


person Avi Kaminetzky    schedule 26.03.2018    source источник
comment
Вы подтвердили в журнале Solr, что они действительно делают один и тот же запрос? (т. е. правильно ли объединяются значения facet.pivot?)   -  person MatsLindh    schedule 27.03.2018
comment
У меня нет доступа к журналам Solr, есть ли способ получить доступ к необработанному URL-адресу на стороне Python?   -  person Avi Kaminetzky    schedule 27.03.2018
comment
Регистрация помогла, смотрите мой ответ   -  person Avi Kaminetzky    schedule 27.03.2018
comment
И моя догадка была верна! :-)   -  person MatsLindh    schedule 27.03.2018


Ответы (1)


По совету matslindh я настроил ведение журнала для pySolr:

  1. Добавьте export DEBUG_PYSOLR='true' в терминал.
  2. Запустите сервер и проверьте журнал.

Вот ссылка, сгенерированная pySoll:

/?q=%2A%3A%2A&rows=0&facet=on&facet.limit=-1&facet.mincount=0&facet.pivot=brand&facet.pivot=series&facet.pivot=sub_series&wt=json

Проблема в том, что pySolr создавал новое поле facet.pivot для каждого элемента в массиве («бренд», «серия» и «под_серия»).

Мой новый код, который устраняет проблему и создает одно поле facet.pivot:

'facet.pivot': 'brand,series,sub_series'
person Avi Kaminetzky    schedule 27.03.2018