2016-08-02 19 views
0

Ich benutze Solr 6.1 im schemalosen Modus. Nach dem Erstellen einer Sammlung und dem Indizieren von Beispieldaten wurde für die erstellten Felder festgelegt, dass MultiValued = true mit Ausnahme der eindeutigen ID verwendet wurde.Solr schemaless Mode Felder als MultiValued erstellen

Das Problem besteht darin, dass bei der Abfrage dieser Daten mit SolrNet das Ergebnis nicht korrekt dem Modell zugeordnet wird. Die abgefragten Ergebnisse werden als Array zurückgegeben und erfordern, dass alle meine Eigenschaften im Modell auf den ICollection-Typ aktualisiert werden.

Können wir dieses Feld trotzdem auf MultiValued = false setzen, wenn die Beispieldaten indiziert werden?

Ein Beispiel, das Problem zu veranschaulichen:

1) Index eine Probe des folgenden Modells in Schemaless Modus:

public class TestModel 
{ 
    [SolrUniqueKey("id")] 
    public int Id { get; set; } 

    [SolrField("guid")] 
    public Guid Guid { get; set; } 
} 

2) verwalteten-Schema-Datei des Solr wird

mit den folgenden Feldern hinzugefügt werden
<field name="guid" type="strings"/> 
    <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/> 

3) Fehler bei der Abfrage/Abbildung des Modells

Object of type 'System.Collections.ArrayList' cannot be converted to type 
+0

also, Sie fragen, ob es eine Möglichkeit gibt, im schemaless-Modus zu indizieren und irgendwie noch ein Feld zu setzen, nur singleValue zu haben, oder? – Mysterion

+0

Ja genau, ich versuche, Solr im schemalosen Modus auszuführen, aber die dynamische Felderzeugung erstellt alles als mehrwertigen Typ. Dadurch wird ein Problem beim Zuordnen des Ergebnisses zum Modell verursacht, ohne dass alle Eigenschaften in den ICollection-Typ konvertiert werden. –

Antwort

4

Der schemalose Modus macht alles multiValued, da es nicht weiß, ob Sie einzelne Werte gefolgt von mehrwertigen Werten für das gleiche Feld haben. So werden alle Felder mehrwertig und numerische Typen auf die größten erweitert.

Dies ist leicht einstellbar, wenn Sie Ihre Domain gut kennen. Die gesamte Zuordnungskette ist in der Aktualisierungsanforderungsprozessorkette von solrconfig.xml (add-unknown-fields-to-the-schema) definiert, und Sie können die Typzuordnung vom mehrwertigen Typ in einen äquivalenten einwertigen Typ ändern. Bei Zeichenfolgen ändern Sie den Wert in defaultFieldType.

+0

Danke Alex, das ist eine sehr nützliche Information, aber wenn ich den Standardtyp für einen einzelnen Werttyp definiere, was passiert, wenn ich versuche, einen mehrwertigen Array-Typ zu indizieren? Mit anderen Worten, wie würde dies das regelmäßige Arbeiten der Feldschaffung beeinflussen? –

+0

Nun, wenn Sie dies manuell tun würden, wie würden Sie wissen, ob jedes neue Feld einwertig oder mehrwertig sein sollte? Ist es nach Namen Muster (und Sie können Zuordnung zu [nur einige Felder] anwenden (http://www.solr-start.com/javadoc/solr-lucene/org/apache/solr/update/processor/FieldMutingUpdateProcessorFactory.html)) Kennen Sie die Ausnahmen im Voraus (wie in Beispiel [Versandfilme] (http://blog.outerthoughts.com/2015/11/oh-solr-home-where-art-thou/))? Möchten Sie [nur das erste/letzte Element beibehalten] (http://www.solr-start.com/info/update-request-processors/#FieldValueSubsetUpdateProcessorFactory)? –

+0

Bisher funktioniert das Ändern des Standardwerts auf den einzelnen Werttyp sehr gut, kein Mapping-Problem mehr, da das gesamte Feld im singulären Typ erstellt wird. Für das gesamte Feld, das ich jetzt indizieren muss, ist alles singulärer Typ, aber nicht sicher, ob es sich zu Arrays und komplexen Modellen ausweiten wird. Ich bin mir nicht sicher, wie es an diesem Punkt gehandhabt wird, ich werde es wohl testen müssen, um es zu sehen. –