Springdata elasticsearch将id字段重新映射到_id

时间:2014-12-05 16:38:48

标签: elasticsearch spring-data-elasticsearch

在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以使其工作。

1 个答案:

答案 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());