2

在 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 才能使其正常工作。

4

1 回答 1

2

更改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());
于 2014-12-06T00:18:37.730 回答