2016-05-03 7 views
0

Ich habe versucht, die Lösungen in der folgenden Frage aufgeführt.So entfernen Sie Duplikate aus mehrwertigen Feldern in SOLR?

Removing Solr duplicate values into multivalued field

Ich verwende Dataimport-Handler und mehrere Werte für das Feld mit RegexTransformer zu schaffen.

My SQL gibt diese für Spalte FOO

Johnny Cash, Bonnie Geld, Honig-Häschen, Johnny Cash

und speichere ich es in die mehrwertig Feld foo mit splitBy = ""

<field column="FOO" name="foo" splitBy=","/>  

und es ist in dem mehrwertigen Feld gespeichert als solche

{ "Johnny Cash", "Bonnie Money", "Honey Bunny", "Johnny Cash"}

Ich habe

<updateRequestProcessorChain name="distinctMultiValued" default="true"> 
    <!-- To remove duplicate values in a multivalued field--> 
    <processor class="DistributedUpdateProcessorFactory"/> 
    <processor class="UniqFieldsUpdateProcessorFactory"> 
     <str name="fieldRegex">foo</str> 
    </processor> 
    <processor class="solr.LogUpdateProcessorFactory" />   
    <processor class="solr.RunUpdateProcessorFactory" /> 
    </updateRequestProcessorChain> 

Ich habe auch dies dem solrconfig xml hinzugefügt versuchte FieldName anstelle von FieldRegex und versuchte * oo anstelle von foo, aber die Duplikate bleiben.

Hat das etwas mit dem RegexTransformer zu tun? Ich habe auch eine Update-Kette mit TrimFieldsUpdateProcessorFactory als läuft ohne Probleme.

Antwort

0

konnte ich löst dies, indem den UniqFieldsUpdateProcessorFactory zum bestehenden <updateRequestProcessorChain> Block musste ich erwähnen müssen.

<updateRequestProcessorChain name="skip-empty" default="true"> 
    <!-- Next two processors affect all fields - default configuration --> 
    <processor class="TrimFieldUpdateProcessorFactory" /> 
    <processor class="RemoveBlankFieldUpdateProcessorFactory" /> 
    <processor class="UniqFieldsUpdateProcessorFactory"> 
     <str name="fieldRegex">.*oo</str> 
    </processor> 
    <processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
    </updateRequestProcessorChain> 

SOLR Dokumentation UpdateRequestProcessorChain

Allenfalls ein Prozessor Kette kann als die "default" konfiguriert werden. Wenn kein Prozessor als Standard konfiguriert ist, wird ein impliziter Standard mit LogUpdateProcessorFactory und RunUpdateProcessorFactory für Sie erstellt. Das Bereitstellen einer Standardprozessorkette kann die einzige Möglichkeit sein, Dokumente zu beeinflussen, die aus einigen Quellen wie dem Dateimport-Handler indiziert werden.

0

können Sie vollständige Klassennamen in der Prozessklasse und <lst name="fields"> <str>multivaluedfield</str></lst>. wie

<processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory"> <lst name="fields"> <str>multivaluedFieldXYZ</str> </lst> </processor>

+0

Das wird nicht funktionieren. Die Option fields wurde ab SOLR 5 eingestellt. – Razen

+0

In der Schemadatei fügen Sie diesen Filter zu Ihrer multivalenten Feldtypdefinition hinzu '' – vinod

+0

Werden doppelte Tokens nicht einfach entfernt? Es entfernt keine doppelten Werte aus dem Feld in den Abfrageergebnissen, oder? – Razen