2013-08-27 1 views
7

Ok, moim elastisearch Używam następujące odwzorowanie dla indeksu:Jak zdefiniować mapowanie w elasticsearch, które nie akceptuje pól innych niż odwzorowane?

{ 

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

      } 
     } 
    } 
} 

to działa. W rzeczywistości, jeśli umieściłem źle sformułowaną datę w polu "opublikowany", skarży się i nie powiedzie się. Również mam następującą konfigurację:

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

A bez odwzorowywania, nie mogę używać rodzaju. Problem polega na tym, że jeśli wstawić coś takiego:

{ "name": "boh58585", "adres": "hiohio", "opublikowanego": "2014-4-4", "test" : "hophiophop" }

z przyjemnością to zaakceptuje. Nie jest to zachowanie, którego oczekuję, ponieważ pole test nie znajduje się w odwzorowaniu. Jak mogę ograniczyć pola dokumentu tylko do tych, które są w mapowaniu ???

Odpowiedz

10

Użycie funkcji "dynamic": false powoduje, że funkcja Elasticsearch nie pozwala na zmianę mapowania indeksu. Jeśli chcesz zgłosić błąd podczas próby indeksowania nowych dokumentów z polami poza zdefiniowanym odwzorowaniem, użyj zamiast tego "dynamic": "strict".

Z dokumentów: "Parametr dynamiczny można również ustawić jako ścisły, co oznacza, że ​​nie tylko nowe pola nie zostaną wprowadzone do odwzorowania, ale parsowanie (indeksowanie) dokumentów z takimi nowymi polami zakończy się niepowodzeniem."

Ponieważ zdefiniowałeś to w ustawieniach, domyślam się, że całkowite pominięcie dynamic z definicji odwzorowania będzie domyślnie ustawione na "dynamic": "strict".