Elasticsearch客户端做什么Spring-Data-Elasticsearch在引擎盖下使用?

问题描述 投票:2回答:2

我想在我的项目中使用Spring Data Elasticsearch,我看到了这个:

The well known TransportClient is deprecated as of Elasticsearch 7.0.0 and is expected to be removed in Elasticsearch 8.0.

我的方法是仅使用Spring Data Elasticsearch进行CRUD操作(类似ORM),使用高级REST Client进行搜索以及其他所有操作。所以我想知道哪个客户端是用于执行其操作的ElasticsearchRepository,以及代码是否在Elasticsearch的8.0版中不再有效。 使用3.1.5版仍然是一个好的决定吗?

java spring-boot elasticsearch spring-data-elasticsearch
2个回答
5
投票

一如既往,这取决于。

关于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时,您只有带有3.2.x的TransportClient,当前可用作里程碑M2,您也可以使用RestClient。

确保您的application.yaml(或.properties)没有任何spring.data.elasticsearch.cluster- *属性,因为这些将注入ElasticsearchTemplate(传输客户端)。

你需要在你的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>
        <!-- need 3.2.0 for REST client-->
        <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>

1
投票

是的,确实使用了传输客户端

© www.soinside.com 2019 - 2024. All rights reserved.