2016-04-12 8 views
0

Ich überlege gerade, ob elasticsearch oder solr in einem Projekt verwendet werden soll und welche Fälle implementiert werden sollen. Ich fand einen Fall, in dem ich keine Dokumentation finden konnte, die mir etwas komisch vorkam, da der Fall mir ganz normal vorkam. Die Kategorien werden vom Benutzer bereitgestellt, daher kenne ich sie nicht im Voraus. Betrachten Sie den folgenden Teil einer Taxonomie mit Dokumenten, die mehrere Kategorien haben:Hierarchische Facettierung mit Lucene/Solr/Elasticsearch, wobei Dokument mehrere Eltern haben kann

  • Wurzel (3)
    • Bücher (2)
      • Sci-Fi (1)
        • DocumentA
      • Fantasie (2)
        • DocumentA
        • DocumentC
    • Filme (1)
      • Aktion (1)
        • DocumentB
    • Games (1)
      • Abenteuer
        • DocumentB

In diesem Fall DocumentB könnte ein Eintrag für beispielsweise sein, Indiana Jones. Normal-Term-Hierarchien können mit dem Pfad-Hierarchie-Tokenizer in solr/elastic implementiert werden, so dass DocumentC "Root/Books/Fantasy" als Kategorie mit einem Pfad hat, der auf '/' aufgeteilt ist.

DocumentB müsste jedoch zwei Pfade haben ('Root/Movies/Action' und 'Root/Games/Adventure'). Ich dachte über das dynamische Hinzufügen eines category_n-Feldes pro Pfad für das Dokument in elastic mit dem Pfadhierarchietokenizer nach und führe dann die Kategoriesuche für alle category_ * -Felder durch, aber ich weiß nicht, ob das der richtige Ansatz wäre Die Anzahl der Dokumente für die Facetten ist nicht einfach, da die Anzahl der übergeordneten Knoten nicht die Summe der untergeordneten Elemente ist (Dokumente können mehreren untergeordneten Kategorien angehören und sollten nicht mehr als einmal gezählt werden).

Was wäre ein guter Weg, dies in solr/elastic zu implementieren?

Prost

Antwort

0

Ich landete ES verwenden und ein Kategoriefeld hatte, in dem ich jeden Weg zum Knoten setzen. Also 'Root/Movies/Action' und 'Root/Games/Adventure'. Dann habe ich einen Tokenizer für die Pfadhierarchie verwendet, der sich auf/mit diesem Feld aufteilt. ES unterstützt das Einfügen mehrerer Pfade in dieses Feld und die Suche nach ihnen. Ich benutzte dann eine Aggregation mit Bucketing auf den Kategorien, die genau das ergab, was ich wollte, Dokumente werden nicht mehrfach gezählt, wenn sie mehr als einmal in einem Zweig vorkommen.

Verwandte Themen