2017-08-18 2 views
0

Ich habe ein Feld wie dies in meinem solr Dokument (in JSON):solr: Facette Suche mehrwertig Feld den gleichen Wert enthält mehrere Male

someField = [Value1, Value2, Value3, Value4,...]; 

Ich möchte wissen, wie viele Dokumente gibt es enthält jede dieser Werte.

Die Facettensuche, die ich ausführe funktioniert, aber es gibt ein Problem: Die Werte repräsentieren eine Hierarchie (durch die Sequenz bezeichnet) und der gleiche Wert könnte auf verschiedenen Ebenen in der Hierarchie (eine andere Entität).

z.

(in document1) someField = [Value1, Value2, Value3, Value4]; 
(in document2) someField = [Value1, Value3, Value4, Value5]; 
(in document3) someField = [Value1, Value3, Value3, Value4]; 

Also mein Ergebnis so looke sollte:

Value1 = 3 
Value2 = 1 
Value3 = 2 (level 2) 
Value3 = 2 (level 3) 
Value4 = 1 (level 3) 
Value4 = 2 (level 4) 
Value5 = 1 

Auf die Dokumente einfügen, kann ich sehen, dass

Value1, Value3, Value3 

Einsetzen richtig eingelegt ist (Solr nicht konvertiert diese in Value1, Value3)

Wie erreiche ich das für die Facettierung, d. e. machen Solr jedes Level von someFiled separat behandeln und nicht alle Value3 als ein Feld zählen?

Antwort

0

Sie können nicht. Ein Token ist ein Token, wenn es um das Facettieren geht.

Sie können jedoch ein sekundäres Feld verwenden und Metainformationen zu Ihren Token hinzufügen, wenn Sie (aus Ihrem eigenen Code) die Ebene dekodieren, auf der sich der Token befindet.

Also für Ihre obigen Beispiel würden Sie ein zweites Feld mit Inhalt someField_indexed benannt haben:

1_Value1: 3 
2_Value2: 1 
2_Value3: 2 
3_Value3: 2 
3_Value4: 1 
4_Value4: 2 
4_Value5: 1 

entfernen alles, was die bis einschließlich:

[1_Value1, 2_Value2, 3_Value3, 4_Value4] 
[1_Value1, 2_Value3, 3_Value4, 4_Value5] 
[1_Value1, 2_Value3, 3_Value3, 4_Value4] 

Die resultierende Facette wäre dann erste _, wenn Sie den Inhalt von den Facetten anzeigen. Sie können damit auch die Position des Werts korrekt filtern (d. H. Nur Dokumente anzeigen, die Value3 an der zweiten Position haben, indem Sie fq=someField_indexed:2_Value3.

verwenden
Verwandte Themen