2017-02-15 7 views
1

Ich arbeite mit einigen dynamischen Attributen in einem Produktkatalog, indiziert unter einem Feld (ähnlich this). Ein einfaches Beispiel würde wie folgt aussehen:Solr facettieren mit dynamischen Feldern?

{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} 

Es ist jedoch unmöglich zu sein scheint Multi-Select zu ermöglichen, als ob alle diese Facetten sind.

Zum Beispiel, sagen wählt der Benutzer die Green Farbe Facette in der Benutzeroberfläche.

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

Die resultierenden Facetten alle möglichen Werte für Color zeigen sollte (dem Benutzer zu ermöglichen Red ODER Green auszuwählen Aber sollte filtern die Size Facette basierend auf Green werden in einer anderen (logischen) Facette ausgewählt.

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

gibt es eine Möglichkeit, dies zu tun? Ich habe keine Antworten gefunden und vermute, dass ein anderer Ansatz notwendig sein könnte. Leider variieren die Arten von Attributen in den Daten wild.

Keines dieser Arbeit:

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

Dies ergibt zu viele Ergebnisse für Size. Eine Facette für [ ]Large sollte NICHT verfügbar sein, würde aber zurückgegeben werden. Wenn der Benutzer es auswählt, sind die zwei Filter disjunkt und ergeben keine Ergebnisse.

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

Dies zu wenige Ergebnisse liefert, ohne Red von Facetten, so dass der Benutzer nicht in der Lage sein, um Multi-Select auf Farbe: Irgendwelche Ideen

[x]Red 
[x]Green 

?

Antwort

1

Ich habe einen Weg gefunden, um dieses Problem zu lösen. Es stellt sich heraus die gleichen facet.field kann mit verschiedenen Tags, wie diese wieder verwendet werden:

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

Dies ergibt zwei Ergebnisse für die DYN_ATT Facette. Etwas wie folgt aus:

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

Dann musste ich nur die DYN_ATT Inhalte für die nicht ausgewählten Facette Ergebnis zu erzielen, und die DYN_ATT_OR Facetten für die ausgewählten Facette Ergebnisse (die, die ich will, damit OR-ing auf, für Multi-Select).

Verwandte Themen