Количество аспектов Solr с выборочным исключением

Я не уверен, возможно ли это, но я хотел бы иметь возможность более точно контролировать количество, возвращаемое для фасетов, чем просто включать и исключать.

В частности, у меня есть интерфейс, который позволяет пользователям фильтровать по «facetA» и «facetB». Это выглядит немного так

  Filter by
    - facetA:    article (20), image (6), activity (14)
    - facetB:    cats (23), dogs(12), hedgehogs(5)

Интерфейс дает понять, что фасет А находится выше в иерархии, чем фасет Б. Я бы хотел, чтобы счетчики facetA были полностью постоянными, а счетчики facetB также были постоянными, но зависели от выбора facetA.

Таким образом, интерфейс может отреагировать на изменение facetB следующим образом:

  Filter by
    - facetA:    article (20), image (6), activity (14)
    - facetB:    cats (23), dogs(12), hedgehogs(5)

то есть ни один из счетчиков не меняется.

Но он будет реагировать на изменение фасеты следующим образом:

  Filter by
    - facetA:    article (20), image (6), activity (14)
    - facetB:    cats (15), dogs(4), hedgehogs(1)

т. е. счетчики facetB изменяются, чтобы отразить то, что доступно после применения фильтра facetA.

Просто делаю

&facet.field={!ex=dt}fieldA&facet.field={!ex=dt}fieldB

не достигает того, что я хочу, но это близко. Я нахожу, что инструкции по этому поводу в вики solr очень расплывчаты - как будто я даже не знаю, что означает «dt». Кто-нибудь может уточнить? Могу ли я получить более точный контроль над тем, как исключаются подсчеты?


person Dave    schedule 02.08.2011    source источник


Ответы (2)


Хорошо, я понял это. 'dt' — это указанный пользователем тег, который устанавливается с помощью оператора {!tag=*} и на который ссылается с помощью оператора {!ex=}.

Итак, приведенный выше пример исправлен, если я добавлю в свой запрос следующее:

&fq={!tag=tagA}fieldA:facetASelection
&fq={!tag=tagB}fieldB:facetBSelection
&facet=true
&facet.field={!ex=tagA}fieldA
&facet.field={!ex=tagB}fieldB

Это означает, что выбор (fq) для facetA не влияет на подсчеты для facetA, а выбор (fq) для facetB не влияет на подсчеты для facetB.

Сладкий! Я почти смирился с отправкой нескольких запросов, чтобы получить нужную мне информацию.

person Dave    schedule 04.08.2011
comment
Хороший!! Ну, я хотел бы сделать что-то подобное, но не совсем так. Вы помните какие-либо документы, откуда вы это взяли? Было бы очень полезно! - person nish; 14.07.2014
comment
Для справки, для Solarium: wiki.solarium-project.org/index.php/ V1: Facet_query - person Sammaye; 28.07.2014

Спасибо. Этот ответ сэкономил мне почти день.

В основном я следовал примеру в http://wiki.apache.org/solr/SimpleFacetParameters, т.е.

q=mainquery&fq=status:public&fq={!tag=dt}doctype:pdf&facet=on&facet.field={!ex=dt}doctype

Поэтому, когда у меня есть несколько аспектов, я все равно использовал {!tag=dt} & {!ex=dt} на обоих аспектах.

Примечание: как правильно указано, dt - это определяемый пользователем тег, который используется на этом аспекте. Поэтому, если я использую dt для обоих аспектов, я не получаю ожидаемого ответа.

Вместо этого => используйте 'dt1' & 'dt2' ... для нескольких аспектов или, как объяснено в приведенном выше примере, используйте 'tagA', 'tagB'....

Еще раз спасибо за ваш предыдущий пост.

person Mandar Kelkar    schedule 20.07.2012
comment
Просто быстрый пример: у меня было три аспекта, а метки тегов разделены запятыми, т.е. {!ex=tagB,tagA} - person Ben Lynch; 25.01.2013