10

我指的是Spring Data Elasticsearch

  • org.springframework.data.elasticsearch.repository.ElasticsearchRepository
  • org.springframework.data.elasticsearch.core.ElasticsearchTemplate

似乎它们是实现相同目标的两种不同 API,但我不确定这两种类型之间有什么区别,更重要的是何时使用哪种类型。

有人可以提供建议和指导吗?

4

1 回答 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 是一个用于处理索引的弹性搜索客户端,它与您的域类没有类型或相关。它更强大,因为您可以执行存储库实现无法执行的许多任务,例如删除索引或进行聚合搜索。

于 2015-04-01T14:04:44.167 回答