Фасетирование Solr: несогласованное форматирование JSON

В моей схеме solr есть следующие два поля:

<field name="brand_id"     type="string" indexed="true" stored="true" />
<field name="category_id"  type="string" indexed="true" stored="true" />

Когда я делаю запрос с включенными фасетами (фасетирование по brand_id) http://example.com/solr/select?wt=json&facet=true&facet.mincount=1&facet.field=brand_id&q= *: *

результат фасетирования возвращается в объектной нотации:

"facet_counts": {
    "facet_queries": { }
    "facet_fields": {
         "brand_id": [
            {"1350492":14},
            {"1350578":12},
            {"1350600":11},
            {"1350617":8}
        ]
    }
}

Однако повторение того же запроса с использованием 'category_id' в качестве поля фасета возвращает нотацию массива http://example.com/solr/select?wt=json&facet=true&facet.mincount=1&facet.field=category_id&q= *: *

"facet_counts":{
    "facet_queries":{},
    "facet_fields":{
        "category_id":[
            "230",20,
            "259",13,
            "154",12,
            "249",11
        ]
    }
}

Есть ли способ принудительно форматировать объектную нотацию? Я использую Solr 3.6

- ОБНОВЛЕНИЕ -

Использование формата XML возвращает правильные результаты:

<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
    <lst name="brand_id">
        <int name="269115">136</int>
        <int name="269394">110</int>
    </lst>


    <lst name="category_id">
        <int name="1348814">228</int>
        <int name="1350591">218</int>
    </lst>

person mjalajel    schedule 16.12.2012    source источник
comment
что будет на выходе, когда вы измените wt с json на xml?   -  person pensz    schedule 16.12.2012
comment
@pensz XML возвращает правильную структуру (я обновил вопрос).   -  person mjalajel    schedule 16.12.2012
comment
Вы абсолютно уверены, что не добавляете json.nl = map к первому запросу, а не ко второму?   -  person Bill Dueber    schedule 17.12.2012
comment
@BillDueber Это не установлено ни для одного из них. Но знание того, что этот параметр существует, отвечает на мой вопрос. Спасибо.   -  person mjalajel    schedule 17.12.2012


Ответы (3)


Как упомянул Билл Дуэбер, вы можете отформатировать вывод JSON с помощью параметра json.nl. Проверьте эту страницу, https://wiki.apache.org/solr/SolJSON#JSON_specific_parameters

person arunchinnachamy    schedule 11.05.2013
comment
Проверьте здесь специальные параметры JSON - person Eagle_Eye; 19.01.2017

Если вы используете средство записи ответов JSON, вы можете добавить параметр json.nl в строку запроса для форматирования количества фасетов.

json.nl=arrmap будет отформатирован как [{"facetValue1": facetCount1}, {"facetValue2": facetCount2}].

json.nl=map будет отформатирован как {"facetValue1": facetCount1, "facetValue2": facetCount2}.

Документы для авторов ответов, в частности json.nl (nl = именованные списки), можно найти здесь: https://cwiki.apache.org/confluence/display/solr/Response+Writers#ResponseWriters-JSON-SpecificParameters

person smrubin    schedule 01.06.2017
comment
спасибо, у меня была аналогичная проблема. json.nl работал - person Vivek Agrawal; 26.12.2020

Некоторое время назад я испытал подобное.

попробуйте добавить тег multiValued = false в определение полей. Я помню, как поправлял это для меня.

Однако вам, возможно, придется переиндексировать.

person Transact Charlie    schedule 06.06.2013