4 Stimmen

Solr: Was sind die Standardwerte für Felder, für die nicht explizit ein Standardwert festgelegt wurde?

Ich arbeite mit der schema.xml von Solr und weiß, dass ich mit dem Attribut "default" einen Standardwert angeben kann, der verwendet wird, wenn für ein bestimmtes Feld kein Wert angegeben wurde. Wenn ich mich jedoch entscheide, das Attribut "default" nicht zu setzen, auf welchen Standardwert greift Solr dann zurück?

Ich würde denken, dass der Feldtyp, den ich für das gegebene Feld verwendet habe, einen Standardwert hat, der verwendet wird, aber ich habe keine Details dazu finden können. Alternativ könnte ich mir vorstellen, dass die Nichtangabe eines Wertes und die Nichtfestlegung eines Standardwertes so wirken, als würde das Feld für das betreffende Dokument nicht existieren.

Ich bin mir aber nicht sicher und würde es gerne wissen :-)

UPDATE 1

Soweit ich sehen kann, wirft Solr einfach einen Fehler und gibt einen Fehler 400 "Bad Request" zurück, wenn kein Standardwert festgelegt wurde und kein Wert für ein bestimmtes Feld angegeben wurde. Mit anderen Worten: Solr scheint keine "Fallback"-Standardwerte anzuwenden, wenn kein Wert angegeben wird und kein Standardwert in schema.xml festgelegt wurde.

UPDATE 2

Meine obige Aktualisierung scheint falsch zu sein. Wenn für ein Feld kein Wert angegeben wurde und kein Standardwert für dieses Feld festgelegt wurde, behandelt Solr das Feld einfach so, als würde es für dieses bestimmte Dokument nicht existieren. Dieses Verhalten gilt natürlich nicht, wenn das Feld erforderlich ist.

7voto

negativ Punkte 111

Wenn Sie während der Indizierung keinen Wert für das Feld angeben, verwendet Solr den in der Datei schema.xml definierten Standardwert. Wenn der Standardwert nicht definiert ist, ignoriert solr dieses Feld. Wenn das Feld in schema.xml als erforderlich markiert ist, weist Solr das Dokument mit einem Fehler zurück.

<field name="comments" type="text" indexed="true" stored="true" required="true"/>
<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" />

4voto

Paige Cook Punkte 22179

Wenn Sie beim Laden von Dokumenten kein Feld angeben, ignoriert Solr das Feld meiner Erfahrung nach bei der Indizierung des Dokuments, und Ihre Aussage "Wenn Sie keinen Wert angeben und keinen Standardwert festlegen, ist das so, als gäbe es das Feld für das betreffende Dokument nicht" ist richtig. Der Haken an der Sache ist, dass Sie nur die Felder angeben müssen, die Sie für das jeweilige Dokument hinzufügen möchten. Schauen Sie sich die xml-Beispieldokumente an, die mit der Solr-Distribution geliefert werden, um einige Beispiele für Dateien zu sehen, die unterschiedliche Feldsätze enthalten.

3voto

ffriend Punkte 26062

Obwohl Sie die Felder in der Datei namens schema.xml sind Solr-Dokumente in der Tat schemalos . Das bedeutet, dass die Solr-Engine (Lucene) intern keine Definition von Feldern hat, die jedes Dokument haben muss. Mit Lucene können Sie einfach Felder hinzufügen myCompletelyNewField zu einem beliebigen Dokument hinzufügen, ohne dass sich dies auf andere Dokumente auswirkt.

Was ist also der Grund für schema.xml ? Jedes Feld in Solr/Lucene hat mehrere Eigenschaften, die bekanntesten davon sind indexed y stored Eigenschaften. Außerdem müssen alle Felder an bestimmte interne Datentypen und Verarbeitungseinheiten gebunden sein. Zum Beispiel, id Feld muss als String gespeichert werden, und description Feld muss mit einem Englisch-Analysator analysiert, mit einem Stoppwort-Filter bereinigt werden usw. Die Übergabe all dieser Informationen in der add Anfrage an Solr ist sehr lästig. Da Sie wissen, welche Felder Sie verwenden werden und Zugang zum Solr-Server haben (zumindest in den meisten Fällen), ist es viel einfacher, all diese Informationen in eine separate Datei zu verschieben. Und diese Datei ist schema.xml .

Sie müssen also verstehen, dass schema.xml Felder definieren, die erlaubt aber keine Felder, die muss existieren im Dokument. Zusätzliche Modifikatoren wie required y default nur zusätzliche Dienste anbieten, bevor sie Dokumente in den Index aufnehmen. D.h. required zwingt das "Front-End" von Solr zu prüfen, ob das angegebene Feld im neuen Dokument vorhanden ist. Wenn ja, wird das Dokument weitergeleitet, andernfalls wird das neue Dokument abgelehnt. default führt dieselbe Prüfung durch, aber wenn das Feld nicht vorhanden ist, wird es mit Standardwerten hinzugefügt und das Dokument weitergegeben.

Was Ihren "Bad Request"-Fehler betrifft, so vermute ich, dass Sie irgendwo anders einen Fehler haben, z.B. wenn Sie ein leeres Feld hinzufügen (das Feld existiert, aber sein Wert ist ""), obwohl es nicht erlaubt ist, oder wenn Sie einen falschen Wert für das Feld verwenden, oder wenn Sie einige andere Modifikatoren haben, die dem tatsächlich hinzugefügten Feld widersprechen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X