2016-04-21 5 views
0

Ich habe ein mehrwertiges Solr-Feld, das nur zum Filtern der Suchergebnisse verwendet wird. Dieses Feld enthält eine Anzahl von Gruppen und wenn der Benutzer zu einer dieser Gruppen gehört, wird dieses Dokument in seiner Suchresultat sein.Solr-Feld mit Zehntausenden von Werten

<field name="group" type="string" indexed="true" multiValued="true" stored="false"/> 

Da ich Zehntausende von Gruppen habe, verursacht dies Leistungsprobleme. Gibt es eine bessere Möglichkeit, Felder mit so vielen Werten als multivalued fields zu behandeln?

Antwort

0

Eine Möglichkeit, dies zu umgehen, besteht darin, die Daten in ein einzelnes Feld mit einem benutzerdefinierten Zeichen um jeden Wert zu transformieren. Wenn Gruppen group1, group2, group3 als mehrwertige Daten enthalten, wandeln Sie sie in ein einzelnes Feld um, das den einzelnen Wert "|| group1 || || group2 || || group3 ||" enthält. (Doppelrohr ist das benutzerdefinierte Zeichen). Dann können Sie während der Abfragezeit dasselbe benutzerdefinierte Zeichen um den Gruppennamen verwenden wie für ex fq = group: "|| group1 ||" nach Gruppe1 filtern Wenn Sie diesen Ansatz wählen, stellen Sie sicher, dass der Feldtyp auf den Typ geändert wird, der Tokenizer für partielle Übereinstimmung und Leerraum unterstützt.

0

Ich bin nicht sicher, ob dies die Leistung erhöht. Aber ich schlage vor, versuche

maxFieldLength (if you are using <solr4.x) 

Erhöhung, die in Solr 4.0 entfernt wird, wenn Sie Solr 4.X verwenden oder neue, try einschließlich Filter für Feldtyp Definition und maxTokenCount Wert zu erhöhen. <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>