Какой клиент Elasticsearch использует Spring-Data-Elasticsearch под капотом? - PullRequest
0 голосов
/ 04 марта 2019

Я хочу использовать 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 ]

0 голосов
/ 02 апреля 2019

Как всегда, это зависит.

О Elasticsearch: текущая версия 6.7.0, TransportClient также будет доступен в ES7, хотя и устарел, но будет удален только в ES8, так что достаточно временииспользовать его - хотя вы должны подумать о его замене.

О поиске пружинных данных:

  • при использовании 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, в настоящее времядоступен как Milestone M2, вы также можете использовать RestClient.

Убедитесь, что ваш application.yaml (или .properties) не имеет каких-либо свойств spring.data.elasticsearch.cluster - *, так как они внедряют ElasticsearchTemplate (Транспортный клиент).

И вам нужно будет установить правильную версию эластичного поиска и поиска пружинных данных в вашем поме (отрывок):

<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>
0 голосов
/ 04 марта 2019

да, он действительно использует транспортный клиент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...