2013-08-27 13 views
7

Tamam, benim elastisearch ben bir dizin için aşağıdaki eşleme kullanıyorum:Elasticsearch'te eşlenenler dışındaki alanları kabul etmeyen bir eşleme nasıl tanımlanır?

{ 

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

      } 
     } 
    } 
} 

çalışıyor. Aslında "yayınlanmış" alanında hatalı bir tarih yazsam, şikayet eder ve başarısız olur.

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

Ve haritalama olmadan

, gerçekten türünü kullanamazsınız: Ayrıca aşağıdaki yapılandırmayı ettik. sorun olduğunu ben böyle bir şey eklerseniz:

{ "isim": "boh58585", "adresi": "hiohio", "yayınlanan": "2014/04/04", "test" : "hofiophop"

bunu memnuniyetle kabul edecektir. Beklediğim davranış değil, çünkü alan test eşlemede değil. Belgenin alanlarını sadece haritalamada bulunanlarla nasıl sınırlandırabilirim ???

cevap

10

"dynamic": false kullanımı, Elastics Search'ün bir dizinin eşlemesinin değiştirilmesine asla izin vermeyeceğini bildirir. Yeni belgeleri tanımlanan eşleştirmenin dışındaki alanlarla indekslemeye çalıştığınızda atılan bir hata istiyorsanız, bunun yerine "dynamic": "strict" kullanın.

Belgelerden: "Dinamik parametre aynı zamanda sıkıya da ayarlanabilir; bu, eşleme için yalnızca yeni alanların eklenmeyeceği anlamına gelmez, bu tür yeni alanlara sahip olan belgelerin ayrıştırılması (dizinlenmesi) başarısız olur."

Bu ayarı ayarlarda tanımladığınızdan, eşleme tanımından dynamic çıktısının tamamen varsayılan olarak "dynamic": "strict" varsayılan olacağını tahmin ediyorum.

İlgili konular