2017-02-15 19 views
1

Я работаю с некоторыми динамическими атрибутами в каталоге продуктов, индексируется под одним полем (аналогично this). Простой пример будет выглядеть следующим образом:Solr multi-select faceting с динамическими полями?

{id: 1, DYN_ATT:Color||Green, DYN_ATT:Size||Small} 
{id: 2, DYN_ATT:Color||Red, DYN_ATT:Size||Small} 
{id: 3, DYN_ATT:Color||Green, DYN_ATT:Size||Small} 
{id: 4, DYN_ATT:Color||Red, DYN_ATT:Size||Large} 

Однако, это, кажется, невозможно включить множественный выбор, как если бы они все разные грани.

Например, говорят, что пользователь выбирает Green Color фасет в пользовательском интерфейсе:.

[ ]Red 
[ ]Green 
---------- 
[ ]Small 
[ ]Large 

Полученные фасеты должны показать все возможные значения для Color (чтобы позволить пользователю выбрать Red ИЛИ Green Но следует фильтровать Size фаска на основе Green выбрана в другой (логической) фаске.

[ ]Red 
[x]Green 
---------- 
[ ]Small 

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

Ни одна из этих работ:

fq={!tag=DYNTAG}DYN_ATT:"Color||Green"&facet.field={!ex=DYNTAG}DYN_ATT 

Это дает слишком много результатов для Size. Фасет для [ ]Large НЕ должен быть доступен, но будет возвращен. Если пользователь выберет его, два фильтра будут непересекающимися и не дадут никаких результатов.

fq={!tag=DYNTAG}DYN_ATT:"Color||Green"&facet.field=DYN_ATT 

Это дает слишком мало результатов, за исключением Red из граней, так что пользователь не сможет выбрать несколько на цвет:

[x]Red 
[x]Green 

Любые идеи?

ответ

1

Я нашел способ решить эту проблему. Оказывается, то же самое facet.field может быть повторно использовано с различными метками, например:

&facet=true 
&fq={!tag=DYN}DYN_ATT:"Color||Green" 
&facet.field=DYN_ATT 
&facet.field={!ex=DYN key=DYN_ATT_OR}DYN_ATT 

Это дает два результата для DYN_ATT фаски. Что-то вроде этого:

"facet_fields": { 
    "DYN_ATT": [ 
     // facets filtered based on fq 
    ] 
    "DYN_ATT_OR": [ 
     // facets unfiltered 
    ] 

Тогда я просто должен был использовать DYN_ATT содержимое для невыбранных результатов огранкой, и DYN_ATT_OR фасетки для выбранных результатов фасеточных (те, которые я хочу, чтобы ИЛИ-на, для множественного выбора).

 Смежные вопросы

  • Нет связанных вопросов^_^