当前位置: 首页 > 面试题库 >

Spring-Data-Elasticsearch在后台使用什么Elasticsearch客户?

罗凯
2023-03-14
问题内容

我想在项目中使用Spring Data Elasticsearch,并且看到了以下内容:

从Elasticsearch 7.0.0开始不推荐使用众所周知的TransportClient,并且应该在Elasticsearch 8.0中将其删除。

我的方法是仅使用Spring Data Elasticsearch进行CRUD操作(类似ORM),并使用High Level REST
Client进行搜索,其余的都使用。所以我想知道ElasticsearchRepository使用哪个客户端执行其操作,以及该代码在Elasticsearch
8.0版中是否将不再有效。
使用版本3.1.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>


 类似资料:
  • 我想在我的项目中使用Spring Data Elasticsearch,我看到了这一点: 我的方法是只使用Spring数据Elasticsearch来执行CRUD操作(类似ORM),使用高级REST客户端进行搜索和所有其他操作。因此,我想知道ElasticsearchRepository使用哪个客户端来执行其操作,以及代码是否在Elasticsearch的8.0版中不再有效 使用3.1.5版仍然是

  • 我有一个spring boot 2.2.5应用程序,并计划使用AWS elasticsearch,其版本为7.4。有人能告诉我是使用Spring数据elasticsearch还是elasticsearch库吗?我在SO上看到一些帖子谈到了这一点,但它们都很老了,并且谈到restHighLevel客户端不受支持,而现在spring data elasticsearch 4中的情况并非如此。x、 无论

  • Spring Data Elasticsearch 项目提供了对 elasticsearch 搜索引擎的集成。

  • 我使用的是ElasticSearch7.1.0,我想创建一个spring-boot应用程序,并使用Spring-Data-Elastic-Search与Elasticsearch连接。但我还没有找到使用查询和聚合的解决方案。

  • Spring Boot 2.1.2在https://github.com/spring-projects/spring-boot/blob/v2.1.2中将Elasticsearch版本定义为6.4.3。release/spring-boot-project/spring-boot-dependencies/pom.xml。 但是,Spring Data Elasticsearch在https:/

  • ElasticsearchRestTemplate使用导入组织。elasticsearch。常见的单元TimeValue;。然而,在最新的elasticsearch版本7.14中,此类不存在。使用ElasticsearchRestTemplate。searchScrollStart方法导致NoClassDefFound异常。 哪个版本的spring-data-elasticsearch将支持7.1