2012-04-08 6 views
1

Der Laden, an dem ich arbeite, verkauft Kleidung. Jedes Kleidungsstück gibt es in mehreren Varianten. Zum Beispiel könnte Shirt A in den folgenden Farben erscheinen: Rot Groß, Rot Mittel, Blau Groß, Blau Mittel, Weiß Groß und Weiß Mittel.Solr Search Facetten: Wie kann ich sie Produkte und NICHT Produktsorten zählen

Zuerst hatte ich jede Sorte als Solr Doc. Hinzugefügt. Also für das oben genannte Produkt habe ich 6 solr Dokumente hinzugefügt, jedes mit der gleichen Produkt ID. Ich habe Solr, um die Ergebnisse nach Produkt ID zu gruppieren und alles hat perfekt funktioniert.

Die Facettenzählungen waren jedoch alle Sortenzählungen und nicht Produktzählungen. So zum Beispiel .. Begrenzung es nur auf die ein Produkt über - (wenn das das einzige Produkt im System war sagen) .. die Facette zählt würde zeigen:

Red (2) Blau (2) White (2)

Welches war richtig, es gab 2 Dokumente für jede Farbe hinzugefügt. Aber wirklich, was ich will, um zu sehen, ist dies:

Red (1) Blue (1) Weiß (1)

Da es nur 1 Produkt für jede Farbe ist.

Also jetzt denke ich, um das zu tun, muss ich jedes Solr-Dokument ein Produkt machen.

In diesem Fall würde ich das Produkt hinzufügen, und fügen Sie das Feld "Farbe" 3 mal eine rote, eine blaue, eine weiße, und fügen Sie die Feldgröße 3-mal auch. Aber jetzt weiß Solr nicht wirklich, welche Größe zu jeder Farbe gehört. Vielleicht habe ich nur Weiß im Kleinen.

Was ist der richtige Weg, um die Facetten so zu zählen, wie sie sein sollten?

Antwort

7

Es stellte sich heraus, dass ich dies mit Gruppierung tun könnte (Feld kollabiert) hier

http://wiki.apache.org/solr/FieldCollapsing#Request_Parameters

speziell diese Parameter zur Abfrage hinzugefügt ist

group=true 
group.field=product_id" 
group.limit=100 
group.facet=true 
group.ngroups=true 

group.facet derjenige, der wirklich das machen Facetten arbeiten mit den Gruppen, wie ich sie haben wollte.

+0

funktioniert wie ein Charme. Danke fürs Teilen! – kieste

1

Ich denke, dass Sie 2 Optionen haben.

Option 1:

Sobald Sie die Liste der Facettenwerte (Rot, Blau & Weiß in dem gegebenen Beispiel) erhalten, dann die ursprüngliche Abfrage erneut als Filter mit jeder Facette Wert abzufeuern. Wenn die ursprüngliche Abfrage beispielsweise q=xyz&group.field=ProductID war, dann feuern Sie q=xyz&group.field=ProductID&group.ngroups=true&fq=color:Red. Der Wert ngroups in der Antwort gibt Ihnen die erforderliche Anzahl für Rot. Auf ähnliche Weise eine separate Abfrage für Blau und Weiß auslösen.

Option 2:

Erstellen Sie ein separates Feld Product_Color genannt, die sowohl die ProductID und die Farbe enthält. Beispiel: Wenn ein Produkt die ID ABC123 hat und die Farbe Red ist, wird Product_ColorABC123_Red. Um nun die Facetten für die Farbe zu erhalten, feuern Sie eine separate Abfrage ab, die nach Product_Color statt ProductID gruppiert und Sie erhalten die erforderlichen Facetten mit den richtigen Werten. Denken Sie daran, group.truncate=true zu setzen, damit dies funktioniert.

0

Sie können versuchen, in Facet Pivot zu suchen, die Ihnen ermöglichen würde, einzelnes Dokument, Baum wie Facette mit richtigen Zählungen und Filterung zu haben.

Verwandte Themen