我正在将Elastic Data 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>
}
使用存储库将对象保存到ES,_id
可以正确填充元数据字段。该id
字段的getter和setter方法正确返回_id
元数据字段的值。但是该字段中的id _source
字段为null。
2个问题:1)为什么id字段为null?2)id字段为null是否重要?
既然你让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
字段为null 没关系……只要您不需要引用它即可。当将JSON文档映射到Java实体时,即使id
ES中的基础字段为null ,Spring Data ES也会始终填充它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句