wxk*_*vin 11 java elasticsearch spring-data-elasticsearch
我使用弹性版本2.2.0的Spring Data Elasticsearch 2.0.1.
我的DAO类似于:
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>
}
Run Code Online (Sandbox Code Playgroud)
使用存储库将对象保存到ES,_id可以正确填充元数据字段.id字段的getter和setter方法正确返回_id元数据字段的值.但是字段中的id _source字段为空.
2个问题:1)为什么id字段为空?2)id字段为空是否重要?
Val*_*Val 12
既然你让ES生成自己的标识,也就是你永远调用MyDao.setId("abcdxyz")则_source可以不必在值id字段.
发生的事情是,如果您生成自己的ID并调用setId("yourid"),那么Spring Data ES将使用它作为_id文档的值,并将该值保留在_source.id字段中.这意味着_source.id不会为空.
如果你不调用setId(),那么_source.id将为null,ES将生成自己的ID.当您调用时getId(),Spring Data ES将确保返回该_id字段的值,而不是_source.id因为它带有注释@Id
要回答第二个问题,该_source.id字段为空无关紧要......只要您不需要引用它.在将JSON文档映射到Java实体时,Spring Data ES将始终填充它,即使idES中的基础字段为空也是如此.
| 归档时间: |
|
| 查看次数: |
6235 次 |
| 最近记录: |