2011-01-11 3 views
3

Ich habe versucht, einen Weg zu finden, Facettierung mit Hierarchien in solr zu implementieren und kann nicht herausfinden, wie es in meiner Situation zu tun ist. Ich habe ein paar Artikel über Hierarchien in solr zusammen mit den Lösungen in Patch 64 und 792 gelesen. Das Hauptproblem, das ich habe, ist, dass ich Entitäten habe, die zu mehreren Zweigen der Hierarchie gehören können. Die aktuelle Form meiner Daten ist ein Benutzerdokument mit MVAs für Land, Bundesland und Stadt.solr geography hierarchy

Nehmen wir zum Beispiel eine geografische Hierarchie, in der Menschen ihre Dienste bis auf Stadtniveau auflisten können. Eine Person kann alle Alabama, aber nur bestimmte Städte in Georgia bedienen. Jetzt zählt die Facettierung für die Staatsebene die verschiedenen Individuen, die einen Bereich bedienen, der eine 1 für Alabama und eine 1 für Georgien ist. Wenn sie auf die Stadtebene ausgedehnt wird, zählt sie für jede Stadt (mit anderen Worten die Summe der Stadt) counts entsprechen nicht unbedingt der Anzahl der States, da sich die counts nicht gegenseitig ausschließen).

US (1)
Georgia (1)
Atlanta (1)
Columbus (0)
Athen (0)
Alabama (1)
Mobile (1)
Birmingham (1)
Huntsville (1)

Der Teil, an den ich mich hänge, ist, wenn ich mich in den Städten befinde. Ich habe keine Möglichkeit zu wissen, zu welchem ​​Staat sie gehören, da der Benutzer sowohl in Alabama als auch in Georgia aufgeführt ist gegenseitig. solr-64 könnte funktionieren, wenn es mehrere Zweige wie US/Alabama/Mobile/und US/Georgia/Atlanta/für dasselbe Dokument unterstützt. Im Moment habe ich es noch nicht geschafft, es mit dem nächtlichen Build zu kompilieren, also bin ich irgendwie festgefahren.

Hat jemand einen besseren Weg, dies zu tun?

+0

Um zu klären, haben Sie ein Dokument pro Stadt oder ein einzelnes Dokument pro Dienst, das alle Städte und Staaten innerhalb des Dokuments auflistet? – rfeak

+0

Es ist ein Dokument pro Dienst. – bcm6435

+0

Alle Vorschläge funktionieren gut mit dem Benutzer, der nur zu 1 Zweig gehört. Was passiert ist, wenn ich die Abfrage für facet.field = city ausstelle, dann erscheinen die Städte für beide Zustände ohne eine Möglichkeit, sie nach ihrem Elternstatus zu gruppieren. Selbst wenn ich schwenke oder gruppiere, denkt es, dass alle Städte zu jedem Staat gehören. Wenn ich ein Trennzeichen in like rfreak lege, kann ich den Baum rekonstruieren, aber es scheint eine Menge clientseitige Verarbeitung zu erfordern, da es die Zählungen nicht automatisch auf die Zustandsebene aufrollen wird. – bcm6435

Antwort

0

Ihre Dokumente im Index einen einzelnen Dienst darstellt Unter der Annahme, ....

Für die Stadt, ein Feld herzustellen, dass der Staat mit der Stadt mit einem Trennzeichen irgendeine Art verkettet ist. Dieses Feld muss dem Benutzer nicht immer angezeigt werden. Es kann zusätzlich zu einem Feld, das Sie speichern, aber nicht indizieren, der tatsächliche Name der Stadt sein.

Zum Beispiel können Sie ein city_facet Feld mit Werten haben könnten:

  • "Ohio - Miami"
  • "Florida - Miami"

Sie wollen wahrscheinlich ein Trennzeichen auszuwählen, die ist sicherer. Ich denke, ein Bindestrich könnte ein potenzieller Konflikt sein.

1

Ich bin nicht so vertraut mit Ihrem Problem, aber es scheint, dass Sie eine Gruppe-nach-Stadt, Staat machen müssen.

Werfen Sie einen Blick auf die Funktion "Gruppieren nach" in SOLR mit dem Namen field collapsing (http://wiki.apache.org/solr/FieldCollapsing).

Schauen Sie sich auch bobo-browse an. Insbesondere compositeFacetHandlers http://code.google.com/p/bobo-browse/wiki/CompositeFacetHandlers. bobo-browse kann in SOLR integriert werden (http://code.google.com/p/bobo-browse/wiki/SolrIntegration)

2

Siehe die erste Anwendungsfall beschrieben here. (Client-Seite Verarbeitung für die Indizierung und Abfrage erforderlich!)

Kategorie Navigation

Das Problem: Sie haben einen Baum von Kategorien und Ihre Produkte werden in mehreren dieser Kategorien eingestuft.

Es gibt zwei relativ ähnliche Lösungen für dieses Problem. Ich werde eine davon beschreiben:

  • Erstellen Sie ein mehrwertiges String-Feld namens "Kategorie". Verwenden Sie die Kategorie-ID (oder den Namen, wenn Sie DB-Abfragen vermeiden möchten).
  • Sie haben einen Kategoriebaum. Stellen Sie sicher, dass ein Dokument nicht nur die Blattkategorie, sondern alle Kategorien bis zum Stammknoten erhält.
  • Jetzt Facette über das Kategoriefeld mit '-1' als Grenzwert
  • Aber was, wenn Sie nur die Kategorien einer Ebene anzeigen möchten? Z.B. wenn du kein anderes Level haben möchtest oder wenn es zu viel ist.

    Dann indizieren Sie das Kategoriefeld ala <level>_category. Dazu benötigen Sie beim Indexieren den kompletten Kategoriebaum im RAM. Dann facet.prefix=<level>_ nutzen Sie die Kategorieliste für die Ebene

  • Durch Klicken auf eine Kategorie Eintrag filtern sollte in einer Filterabfrage führen ala fq=category:”<level>_categoryId”
  • Der kleine schwierige Teil ist nun, dass die Benutzeroberfläche oder mittlere Ebene hat das Niveau zu analysieren z.B. 2 und das Anfügen 2 + 1 = 3 auf die Abfrage: facet.prefix = 3_
  • Wenn Sie die Ebene dann eine Frage bleibt filtern:

    Q: Wie kann man den Weg von der gewählten Kategorie, bis die Anzeige Wurzelkategorie?

    A: Entweder erhalten Sie die Kategorie Eltern über DB, was einfach ist, wenn Sie die Kategorie IDs in Solr speichern - nicht die Kategorienamen. Oder die Eltern aus der Parameterliste, die ein bisschen komplizierter, aber machbar ist. In diesem Fall müssen Sie die Kategorienamen in Solr speichern.

+0

Ich glaube, ich verstehe, was du sagst, ich habe etwas Ähnliches gemacht, bevor ich die Level in verschiedene Bereiche aufgeteilt habe. Was passiert, wenn ein Produkt in mehr als einer Kategorie ist und Sie auf den Blättern facettieren möchten, aber es auf nur 1 Zweig beschränken?Ich kann keine Lösung finden, die mir die Zählung und Zählung ermöglicht, ohne die Blätter des anderen Zweiges zu berücksichtigen. Ich kann es als ID-Werte speichern und zurück zur DB gehen, um die Elternkategorie nachzufragen, um die unerwünschten Blätter herauszufiltern, aber das bedeutet auch, dass ich die Zählungen auf der Client-Seite handhaben muss. Vielleicht vermisse ich etwas? – bcm6435

+0

Wir zeigen immer zuerst die Wurzel an (z. B. Filme, Bücher, ...). Dann sieht der Benutzer, in welche Zweige er hinein kann. – Karussell

+0

(ein Layout-Problem: in der Post wurde die level_category-Sache entfernt. Aktualisiert) – Karussell

Verwandte Themen