在java中我有一个域类Foo。它有一个id字段。 Springdata会自动将此字段映射到字段“id”而不是“_id”,因为它的名称。有没有办法将此ID重新映射到_id字段?
public class Foo {
@Id
@Field(type = FieldType.String, store = true)
private String id;
}
因此,当我执行findById(String id)时,find by将使用域对象中的id字段,而不是弹性搜索生成的_id。
我尝试制作名为findBy_Id(String id)的方法,但是spring数据库会抱怨模型中不存在该字段。我不想在我的所有对象中将我的id属性重命名为_id以使其工作。
答案 0 :(得分:1)
更改Foo
类定义以定义索引名称和类型参数。
@Document(indexName = "foo",type = "foo")
public class Foo {
@Id
@Field(type = FieldType.String, store = true)
private String id;
}
假设您正在使用Spring数据。您必须已创建FooRepository
,如下所示。
public interface FooRepository extends ElasticsearchRepository<Foo,String> {
}
您必须使用save
方法在弹性搜索中索引Foo
对象。
Foo objFoo = new Foo();
objFoo.setId("123");
objFooRepository.save(objFoo);
弹性搜索将通过创建一个名为foo的新索引并键入foo来索引文档objFoo。
{
"_index": "foo",
"_type": "foo",
"_id": "123",
"_score": 1,
"_version": 1,
"_source": {
"id": "123"
}
}
使用存储库的findOne()
方法检索索引文档。
Foo indexedFoo = repository.findOne(objFoo.getId());