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



我的方法是仅使用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- *属性,因为这些属性将注入(inject)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>
    

    关于java - Spring-Data-Elasticsearch在后台使用什么Elasticsearch客户端?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54981698/

    10-14 10:00
    查看更多