一如既往,这取决于具体情况。
关于Elasticsearch:当前的版本是6.7.0,TransportClient也将在ES7中可用,尽管已经被弃用,但只有在ES8中才会被移除,因此还有相当长的时间可以使用它-尽管您应该考虑替换它。
关于spring-data-elasticsearch:
- 使用
ElasticsearchTemplate
时,您正在使用TransportClient。
- 使用
ElasticsearchRestTemplate
时,您正在使用RestClient(在3.2.0中可用)。
- 使用默认的
ElasticsearchRepository
时,您正在使用TransportClient。
- 如果使用自定义存储库扩展例如下面显示的
SimpleElasticsearchRepository
,则使用的是RestClient。
示例配置类:
@SpringBootApplication
@EnableElasticsearchRepositories
public class SpringdataElasticTestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringdataElasticTestApplication.class, args);
}
@Bean
RestHighLevelClient elasticsearchClient() {
final ClientConfiguration configuration = ClientConfiguration.localhost();
RestHighLevelClient client = RestClients.create(configuration).rest();
return client;
}
@Bean
ElasticsearchRestTemplate elasticsearchTemplate() {
return new ElasticsearchRestTemplate(elasticsearchClient());
}
}
示例存储库类:
public interface PersonRepository extends ElasticsearchRepository<Person, Long> {
}
示例POJO类:
@Document(indexName = "person")
public class Person {
@Id
private Long id;
private String lastName;
private String firstName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
在使用3.1.x时,你只能使用TransportClient;而在目前可用的3.2.x里,作为里程碑M2版本,你可以使用RestClient。
确保你的application.yaml(或.properties)中没有任何spring.data.elasticsearch.cluster-*属性,因为这些会注入ElasticsearchTemplate(Transport Client)。
同时,你需要在pom文件中设置正确的elasticsearch和spring-data-elasticsearch版本(摘录如下):
<properties>
<elasticsearch.version>6.6.1</elasticsearch.version>
</properties>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<!
<version>3.2.0.M2</version>
</dependency>
<repository>
<id>Spring-Framework-Milestone</id>
<name>Spring Framework Milestone</name>
<url>http://maven.springframework.org/milestone/</url>
</repository>
ElasticsearchRepository
缺少了elasticsearchTemplate
bean。ElasticsearchRestTemplate
的bean名称需要是ElasticsearchRestTemplate elasticsearchTemplate() {...
,一旦我纠正了这个问题,接口扩展的其他部分都按照我所期望的方式工作了。 - SuperSaiyen