Filtern Sie irrelevante Facetten aus Solr-Ergebnissen

8

Ich habe stundenlang nach einer Lösung für mein Problem gesucht. Ich habe Leute gesehen, die Fragen gestellt haben, die nahe an dem liegen, was ich erreichen möchte, aber bisher scheint niemand dieselbe Frage zu stellen. Lassen Sie mich sehen, ob ich das adäquat erklären kann:

Sagen Sie, ich bin ein Schuhgeschäft. Auf meiner Website habe ich drei Seiten: eine für Herrenschuhe, eine für Damenschuhe und eine für Kinderschuhe. Sagen wir, mein Schuhtisch hat das Feld prod_group. Also für die Männer-Seite wäre die Abfrage q = prod_group: Männer. Sagen wir mal, eine der Facetten, die ich anbieten möchte, ist die Marke. q = prod_group: men & amp; filter.field = Marke

Das Problem, das ich habe, ist die Facette Ergebnisse zeigen alle Marken in meiner Datenbank, nicht nur Marken für Männer Schuhe relevant. Mit anderen Worten, ich weiß bereits, dass es in der Linie "My Little Pony" keine Männerschuhe gibt. Ich möchte My Little Pony nicht in der Markenfacette anzeigen. Die Einstellung von facet.mincount ist auch nicht das, was ich brauche. Wenn ich eine Abfrage q = prod_group: men & amp; fq = color: red & amp; filter.field = brand, möchte der Kunde dem Verbraucher zeigen, dass die Marke "Mighty Joe" keine roten Schuhe hat, also brauche ich noch Facetten mit eine Facettenanzahl von 0.

Grundsätzlich erhoffe ich mir Facettenergebnisse basierend auf den Ergebnissen der Basisabfrage. Bisher ist die einzige Möglichkeit, dies zu erreichen, zwei Abfragen auszuführen: die erste mit nur der Basisabfrage und die Einstellung facet.mincount = 1, um eine Liste relevanter Facetten zu erhalten, und dann die eigentliche Abfrage mit facet.mincount zurück auf 0 Ich kann herausfinden, wann bestimmte Optionen, die nicht mehr verfügbar sind, basierend auf bereits getroffenen Facetten-Optionen ausgegraut werden können.

Das Ausführen von zwei Abfragen scheint etwas weniger als elegant zu sein. facet.pivot könnte auf lange Sicht helfen, aber wir verwenden immer noch 3.x und ich sehe nicht, dass sich das bald ändern wird. Habe ich eine Abfrage / Schema / Konfigurationsoption verpasst, die mit einer Abfrage das tut, was ich brauche?

    
SeanH 18.10.2012, 18:29
quelle

3 Antworten

2

Sie können prüfen, für eine Option namens Facet ohne Filter , die es Ihnen erlaubt, die Facetten zurückkehren unabhängig vom angewendeten Filter.

z.B. Sie Männer filtern fq=prod_group:men mit facet.mincount 1, die alle um die Marke zu diesem Filter Facetten anwendbar zurück.
Wenn Sie dann eine Farbe fq=color:red subfiltern, können Sie zwei Facetten zurück eins mit den Ergebnissen und eins ohne den Filter mit den ausschließenden Filtern erhalten z.B. fq={!tag=dt}color:red&facet.field={!ex=dt key=nonfilter_brand}brand&facet.field=brand

Damit erhalten Sie sowohl die Facetten mit als auch ohne Filter, mit denen Sie die Unterschiede auf der Client-Seite ausgrauen können. Ein wenig Overhead auf der Client-Seite, aber Sie müssen nur eine einzige Abfrage durchführen.

    
Jayendra 19.10.2012 09:52
quelle
0

Haben Sie sich die Option facet.query angesehen. Aus der Beschreibung klingt es, als würde es erreichen, was Sie brauchen.

  

Mit diesem Parameter können Sie eine beliebige Abfrage in der Lucene-Standardsyntax angeben, um eine Facettenanzahl zu generieren. Standardmäßig gibt Facettierung die Anzahl der eindeutigen Begriffe für ein "Feld" zurück, während facet.query die Anzahl für beliebige Ausdrücke oder Ausdrücke bestimmt.

    
Paige Cook 18.10.2012 19:28
quelle
0
%Vor% Mit

wird auch die Filterung für die Facette durchgeführt, was bei q -Parametern nicht der Fall ist.

    
aitchnyu 19.10.2012 10:29
quelle

Tags und Links