web-dev-qa-db-de.com

Solr-Index vs gespeichert

Ich bin etwas verwirrt, was das Verhalten des Index und der gespeicherten Werte der Solr-Felder ist.

Zum Beispiel, wenn ich Folgendes in der Schema.xml habe 

<field name="test1" type="text" indexed="false"
        stored="false" required="false" />

Wird das Feld test1 nicht im Solr-Dokument gespeichert, auch wenn ich ein Dokument mit diesem Feld erstellt und einen Wert für dieses Feld festgelegt habe und das Dokument an Solr übergeben. Bedeutet das, da ich das stored=false-Attribut habe, dass der Wert des Feldes in Solr verloren geht und nicht dauerhaft bleibt?

52
user1965449

Das ist richtig. Normalerweise möchten Sie, dass Ihr Feld entweder indiziert oder gespeichert wird oder beides. Wenn Sie beide auf "false" setzen, ist dieses Feld in Ihren Solr-Dokumenten nicht verfügbar (entweder für die Suche oder für die Anzeige). Siehe Alexandres Antwort für die speziellen Fälle, in denen Sie beide auf "false" setzen möchten.

Wie hier : indexed=true macht ein Feld durchsuchbar (und sortierbar und facettierbar). Wenn Sie beispielsweise ein Feld namens test1 mit indexed=true haben, können Sie es wie q=test1:foo durchsuchen, wobei foo der Wert ist, nach dem Sie suchen. Wenn indexed=false für Feld test1, gibt diese Abfrage keine Ergebnisse zurück, selbst wenn Sie ein Dokument in Solr haben, dessen Wert test1foo ist.

stored=true bedeutet, dass Sie das Feld bei der Suche abrufen können. Wenn Sie den Wert eines Felds in Ihrer Abfrage explizit abrufen möchten, verwenden Sie den Parameter fl in Ihrer Abfrage wie fl=test1 (der Standardwert ist fl=*, dh alle gespeicherten Felder werden abgerufen). Nur bei stored=true für test1 wird der Wert zurückgegeben. Sonst wird es nicht zurückgegeben.

88
arun

Wenn beide Werte auf false gesetzt sind, wird das jeweilige Feld explizit übersprungen. 

Zum Beispiel, wenn Sie über eine DynamicField-Zuordnung zum Speichern/Indexieren verfügen und einen bestimmten Namen ignorieren möchten, der andernfalls unter das DynamicField-Muster fallen würde. 

Alternativ können Sie dynamicField verwenden, um eine ganze Reihe von Feldern mit dem gleichen Präfix/Suffix von Drittanbietern zu ignorieren. Zum Beispiel sendet Tika Ihnen eine ganze Reihe von Metadatenfeldern, die Sie vielleicht einfach ignorieren möchten. Siehe dies in Solrs Beispiel schema.xml definiert und in solrconfig.xml verwendet.

In den späteren Versionen von Solr können Sie stattdessen auch IgnoreFieldUpdateProcessorFactory (siehe vollständige Liste für andere) verwenden, wodurch diese Felder noch früher im Indexierungsprozess entfernt werden.

24

Zitieren aus dieser Antwort im Mail-Thread von Solr: 

"indiziert" und "gespeichert" sind unabhängige orthogonale Attribute. Sie können .__ verwenden. eine der vier Kombinationen von wahr und falsch. "indexiert" wird für die Suche verwendet oder Abfrage, den "Nachschlag" -Abschnitt der Verarbeitung einer Abfrageanfrage. Einmal die search/query/lookup ist abgeschlossen und eine Reihe von Dokumenten wird ausgewählt, "gespeichert" ist die Menge von Feldern, deren Werte zur Anzeige verfügbar sind oder mit .__ zurückgegeben werden. die Antwort von Solr.

Ein Grund für die Trennung ist, dass Solr/Lucene oder .__ "analysiert". wandelt die Eingabedaten in eine effizientere Form um, um schneller und mehr. relevante Suche/Suche. Leider handelt es sich bei den analysierten/transformierten Daten um häufig nicht mehr für die Anzeige und den menschlichen Verzehr geeignet. In anderen Die Analyse/Transformation ist also nicht bidirektional/reversibel. Rahmen "gespeichert = true" garantiert, dass die Originaldaten in seiner .__-Datei abgerufen werden können. Ursprungsform.

4
Pale Blue Dot

Wenn beide falsch sind, verlieren Sie Ihre Daten in diesem Feld. Bei einem indizierten Wert können die Daten durchsucht werden, sie können jedoch nicht angezeigt werden. Wenn Sie "true" festgelegt haben, können Sie nicht in diesem Feld suchen, es kann jedoch angezeigt werden (in diesem Fall können Sie eine Copyfield-Regel schreiben, um die Informationen aus diesem Feld in das durchsuchbare Standardfeld zu kopieren). Beide sind auf true gesetzt -> Sie können suchen und anzeigen.

0
Alik Vardanyan