2016-05-17 20 views
7

Yaylı olarak Elastic Version 2.2.0 ile Elastics Version 2.0.1 kullanıyorum.Yay Veri Elasticsearch id vs. _id

import org.springframework.data.annotation.Id; 
import org.springframework.data.elasticsearch.annotations.Document;  

@Document(indexName = "myIndex") 
public class MyDao { 
    @Id 
    private String id; 

    public String getId() { return id; } 
    public void setId(String id) { this.id = id; } 

    <other fields, setters, getters omitted> 
} 

_id meta alan doğru doldurulur alır bir depo kullanarak ES nesneyi Kaydetme:

My DAO benzer. id alanı için getter ve ayarlayıcı yöntemleri, _id meta veri alanının değerini doğru bir şekilde döndürür. Ancak _source alanındaki kimlik alanı boş.

2 soru: 1) Kimlik alanı neden boş? 2) Kimlik alanının null olması fark eder mi?

+0

ES'nin kendi kimliklerini oluşturmasına izin veriyor musunuz yoksa kendi kimliğinizi mi sağlıyorsunuz? Yani, hiç 'MyDao.setId (" abcdxyz ")' diyorsunuz? – Val

+0

ES'nin kendi kimliklerini oluşturmasına izin veriyorum. Kimliğin her iki alanda da gösterilmesini sağlamak için otomatik kimlik kimliğini kullanabilir miyim? – wxkevin

+0

@wxkevin Farklı bir soru, ama pomlarınızı paylaşabilirsiniz. Spring-data-elasticsearch 2'yi kullanmaya çalışırken hatalarla uğraştım: [question-link] (http://stackoverflow.com/questions/37047845/cannot-use-custom-autoconfiguration-with-spring-data-elasticsearch/ 37107628) –

cevap

9

ES'nin kendi kimliklerini oluşturmasına izin verdiğinizden, yani hiçbir zaman MyDao.setId("abcdxyz") numaralı telefonu aramıyorsunuz, daha sonra _sourceid alanında bir değere sahip olamaz. neler oluyor

kendi kimliklerini oluşturmak ve setId("yourid") ararsanız, o zaman Bahar Veri ES belgenizin _id değeri olarak kullanacak ve aynı zamanda _source.id alana bu değeri inat olmasıdır. Bu, _source.id'un sıfır olmayacağı anlamına gelir.

setId()'u aramazsanız, _source.id null olacaktır ve ES kendi kimliğini oluşturur. Sonra getId() aradığınızda sizin ikinci soruya cevap vermek için @Id

ile açıklamalı beri, Bahar Veri ES o _source.id alanı boş olduğunu fark etmez, _source.id_id alanın size değer döndürmek değil emin olacaktır ... referans göstermeniz gerekmediği sürece. Bahar Verileri ES, ES'de sıfır olan id alanı sıfır olsa bile, JSON belgelerini Java varlıklarınızla eşleştirirken her zaman doldurur.

+0

Yani Elasticsearch'in kimliğini oluşturması ve kimliğimi kimliğimde kullanması için bir yol olmadığını mı söylüyorsunuz? – wxkevin

+1

Evet, ES kimlikleri '_id 'alanında' _source.id' (veya bu alana vermek istediğiniz adın adı) 'dan farklı olarak saklanır. En iyi yaklaşım, kendi kimliğinizi oluşturmak ve 'setId()' – Val

+1

numaralı telefonu çağırmaktır. Id niteliğinde @JsonIgnore kullanmış ve alan ES'de oluşturulmamış! – Wendel

İlgili konular