Spring Data Elasticsearch的ElasticsearchTemplate与ElasticsearchRepository的区别

10
我参考了Spring Data Elasticsearch的两个API:org.springframework.data.elasticsearch.repository.ElasticsearchRepositoryorg.springframework.data.elasticsearch.core.ElasticsearchTemplate,它们似乎都是实现相同目的的不同接口。但我不确定这两种类型之间有何区别,更重要的是什么情况下应该使用哪个API。请问有人能提供建议和指导吗?
1个回答

10

ElasticsearchRepository旨在作为您的领域类的存储库使用,因为它是类型化的。它扩展了Spring的存储库接口,因此可以将其用作其中之一。如果您已经习惯于Spring存储库,则会感到非常舒适。

要开始将对象索引到Elasticsearch,您只需要向它们添加@Document注释并创建一个扩展ElasticsearchRepository的Repository接口即可。

可索引的类:

@Document(
    indexName = "customers", 
    type = "customer", 
    shards = 1, 
    replicas = 0, 
    refreshInterval = "-1"
)
public class Customer {
    @Id
    private Long id;
    private String name;

    public Customer() { 
    }

    public Customer(String name) {
        this.name = name;
    }

    //Getters and setters omited
}

代码库:

public interface CustomerRepository 
    extends ElasticsearchRepository<Customer, Long>{
}

通过使用这个工具,你可以直接实现CRUD操作、索引、搜索和其他常见操作。

而 ElasticsearchTemplate 是一个 Elasticsearch 客户端,用于与你的索引进行交互,它不是针对你的领域类进行类型定义或关联。它更加强大,因为你可以执行许多仓库实现不支持的任务,例如删除索引或执行聚合搜索。


3
这还有效吗?当我运行与您相同的代码时,Spring现在告诉我要添加一个名为“elasticsearchTemplate”的bean。 - FabianTe
我遇到了相同的问题。它要求我在我的类中添加 elasticsearchTemplate。你知道为什么吗? - Mohamed Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接