2013-08-27 3 views
7

Ok, in meinem Elasticsearch Ich verwende die folgende Abbildung für einen Index:Wie definiert man ein Mapping in elasticsearch, das keine anderen Felder akzeptiert als die zugeordneten?

{ 

    "mappings": { 
     "mytype": { 
      "type":"object", 
      "dynamic" : "false", 
      "properties": { 
       "name": { 
        "type": "string" 
       }, 
       "address": { 
        "type": "string" 
       }, 
       "published": { 
        "type": "date" 
       } 

      } 
     } 
    } 
} 

es funktioniert. In der Tat, wenn ich ein falsch formatiertes Datum in das Feld "veröffentlicht" schreibe, klagt es und versagt. Auch habe ich die folgende Konfiguration:

... 
node.name : node1 
index.mapper.dynamic : false 
index.mapper.dynamic.strict : true 
... 

Und ohne die Zuordnung, ich kann wirklich nicht die Art verwenden. Das Problem ist, dass, wenn ich einfügen so etwas wie:

{ "name": "boh58585", "Adresse": "hiohio", "veröffentlicht": "2014.04.04", "test" : "hophiophop" }

wird es glücklich akzeptieren. Welches ist nicht das Verhalten, das ich erwarte, weil das Feld test nicht im Mapping ist. Wie kann ich die Felder des Dokuments auf diejenigen beschränken, die sich im Mapping befinden ???

Antwort

10

Die Verwendung von "dynamic": false weist Elasticsearch an, die Zuordnung eines Indexes niemals zu ändern. Wenn Sie einen Fehler erhalten möchten, wenn Sie versuchen, neue Dokumente mit Feldern außerhalb des definierten Mappings zu indizieren, verwenden Sie stattdessen "dynamic": "strict".

Aus der Dokumentation: "Der dynamische Parameter kann auch auf strict gesetzt werden, was bedeutet, dass nicht nur neue Felder in das Mapping eingeführt werden, sondern das Parsen (Indexieren) von Dokumenten mit solchen neuen Feldern fehlschlägt."

Da Sie dies in den Einstellungen definiert haben, würde ich annehmen, dass die dynamic aus der Mapping-Definition vollständig zu "dynamic": "strict" standardmäßig verlassen wird.

Verwandte Themen