2016-04-12 33 views
11

İç içe geçmiş bazı belgeleri bir Elasticsearch (v2.3.1) eşlemesine endekslemeye çalışıyorum: (based on this example from the documentation):İç içe geçme türünde Elasticsearch: "Nesne eşleştirmesi iç içe geçmişten iç içe değil", bir belge dizine eklenirken

PUT /my_index 
{ 
    "mappings": { 
    "blogpost": { 
     "properties": { 
     "title": { "type": "string" }, 
     "comments": { 
      "type": "nested", 
      "properties": { 
      "name": { "type": "string" }, 
      "comment": { "type": "string" } 
      } 
     } 
     } 
    } 
    } 
} 

Ancak, JSON belgelerinin bu eşleştirmeye uyması için nasıl görünmesi gerektiğini anlamıyorum. Ben

PUT /my_index/some_type/1 
{ 
    "title": "some_title", 
    "comments": { 
    "name": "some_name", 
    "comment": "some_comment" 
    } 
} 

yanı sıra

ile çalıştı endeksi iç içe belgelere doğru biçimidir
{ 

    "error": 

{ 

    "root_cause": 

[ 

      { 
       "type": "remote_transport_exception", 
       "reason": "[Caiman][172.18.0.4:9300][indices:data/write/index[p]]" 
      } 
     ], 
     "type": "illegal_argument_exception", 
     "reason": "object mapping [comments] can't be changed from nested to non-nested" 
    }, 
    "status": ​400 

} 

yılında

PUT /my_index_some_type/1 
{ 
    "title": "some_title", 
    "comments": [ 
     { 
     "name": "some_name", 
     "comment": "some_comment" 
     } 
    ] 
} 

hangi ikisi sonuç ile? Herhangi bir çalışma örneği çok takdir görmektedir, buradaki çoğu örnek SO'da veya diğer sayfalarda belgelerin daha önce endekslenmesinden ziyade iç içe geçmiş sorgulara yoğunlaşmaktadır.

+2

URL'nizde 'blogpost' haritalama türünü kullanarak gelmiyor musun? Sorunuzdan belli değil (yani 'some_type' vs blogpost'). Görünüşe göre 'some_type' türünde bir belge oluşturuyorsunuz ve 'yorumlar' normal bir nesneyi varsayılan olarak ayarlayacağınız için izinliydi, çünkü zaten 'blogpost' eşleme türünde 'yorumlar' adlı yuvalanmış bir nesneye sahip olduğunuzdan izin verilmiyor. – Val

+0

Ahh hayır, cidden ... farklı kaynaklardan çok fazla kopyalayıp yapıştırdığınızda olan şey bu. Bunu bir yanıt olarak eklemek isterseniz, kabul etmekten mutluluk duyarız, böylece etrafımızdaki bir örnek daha var. – Dirk

cevap

8

O gerçekten varsayılan olacaktır tip some_type ve comments bir belge oluştururken görünüyor normal object (yani değil nested), zaten yuvalanmış nesne içinde blogpost haritalama türü comments denilen beri izin verilmez hangi aynı endeks

Bu yolu deneyin ve çalışması gerekir:

PUT /my_index/blogpost/1 
{ 
    "title": "some_title", 
    "comments": { 
    "name": "some_name", 
    "comment": "some_comment" 
    } 
} 
+0

Bu nasıl bir cevap? Tam olarak çalışmayan örnekle aynıdır (tip değişikliği hariç). Bu sorunu yaşıyorum, doğru tür kullanıyorum ve aynı hatayı alıyorum. – Gullbyrd

+2

@Gullbyrd, yazının türüne daha dikkatli bir şekilde bakar (ipucu: '' blogpost' yerine 'some_type') ;-) Bunu referansla yeni bir soru oluşturmanızı öneririm ancak içeriğinizi ve ayrıntılarınızı açıklar ve biz bunu anlayabiliriz. dışarı. – Val