为了账号安全,请及时绑定邮箱和手机立即绑定

Spring-Data-Elasticsearch 在后台使用什么 Elasticsearch

Spring-Data-Elasticsearch 在后台使用什么 Elasticsearch

慕后森 2022-07-20 15:37:31
我想在我的项目中使用 Spring Data Elasticsearch,我看到了这个:众所周知的 TransportClient 自 Elasticsearch 7.0.0 起已弃用,预计将在 Elasticsearch 8.0 中删除。我的方法是仅使用 Spring Data Elasticsearch 进行 CRUD 操作(类似 ORM),使用高级 REST 客户端进行搜索和所有其他操作。所以我想知道 ElasticsearchRepository 使用哪个客户端来执行其操作,以及代码是否在 Elasticsearch 8.0 版中不再有效。使用 3.1.5 版仍然是一个好的决定吗?
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

一如既往,这取决于。

关于 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(传输客户端)。


您需要在 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>



查看完整回答
反对 回复 2022-07-20
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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



查看完整回答
反对 回复 2022-07-20
  • 2 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信