2013-08-27 11 views
7

Ok, a mio elasticsearch Sto usando il seguente mappatura per un indice:Come definire una mappatura in elasticsearch che non accetta campi diversi da quelli mappati?

{ 

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

      } 
     } 
    } 
} 

funziona. Infatti se metto una data malformata nel campo "pubblicato" si lamenta e fallisce. Anche io ho la seguente configurazione:

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

E senza la mappatura, non posso davvero utilizzare il tipo. Il problema è che se inserisco qualcosa di simile:

{ "name": "boh58585", "indirizzo": "hiohio", "pubblicato": "2014/04/04", "test" : "hophiophop" }

lo accetterà volentieri. Quale non è il comportamento che mi aspetto, perché il campo test non è nella mappatura. Come posso limitare i campi del documento solo a quelli presenti nella mappatura ???

risposta

10

L'uso di "dynamic": false indica a Elasticsearch di non consentire mai la modifica di un indice. Se si desidera che venga generato un errore quando si tenta di indicizzare nuovi documenti con campi esterni alla mappatura definita, utilizzare invece "dynamic": "strict".

Dai documenti: "Il parametro dinamico può anche essere impostato su strict, il che significa che non solo i nuovi campi non verranno introdotti nella mappatura, i documenti di analisi (indicizzazione) con tali nuovi campi avranno esito negativo."

Dal momento che questo è stato definito nelle impostazioni, suppongo che l'omissione dello dynamic dalla definizione del mapping sia predefinita su "dynamic": "strict".

Problemi correlati