通过spring-data-elasticsearch连接腾讯云ES

  • 2019 年 10 月 29 日
  • 笔记

spring-data-elasticsearch有两种方式连接Elasticsearch,一种是TCP的方式,通过9300端口连接,还有一种是HTTP的方式,通过9200端口连接。腾讯云ES提供了9200端口的HTTP方式来连接ES。其中spring-data-elasticsearch的版本和Elasticsearch的版本需要匹配和兼容,本文使用的elasticsearch版本为6.4.3。

1、添加maven依赖包:

<dependency>      <groupId>org.springframework.data</groupId>      <artifactId>spring-data-elasticsearch</artifactId>      <version>3.2.0.RELEASE</version>  </dependency>

其中Elasticsearch版本和Spring-data-elasticsearch版本之间的关系可参考下图(图片来自官网):

spring-data-elasticsearch与Elasticsearch的版本对应关系

2、配置ElasticsearchRestTemplate

向Spring IoC容器中注入Bean ElasticsearchRestTemplate :

@Configuration  public class EsClientConfig {      @Bean      RestHighLevelClient restHighLevelClient() {          ClientConfiguration clientConfiguration = ClientConfiguration.builder()                  .connectedTo("ip",port)                    // es的http连接地址                  .withBasicAuth("username", "password")    // 如果开启了用户名密码验证,则需要加上                  .build();          return RestClients.create(clientConfiguration).rest();      }  @Bean      ElasticsearchRestTemplate elasticsearchRestTemplate(@Autowired RestHighLevelClient restHighLevelClient) {          return new ElasticsearchRestTemplate(restHighLevelClient);      }  }

3、注入ElasticsearchRestTemplate

使用注入的Bean来进行对ES的操作,以新增和获取一条document为例:

首先创建一个POJO类:

@Data  @AllArgsConstructor  @NoArgsConstructor  @Document(indexName = "person")  public class Person {      private int id;      private String name;      private int age;  }

注入ElasticsearchRestTemplate,使用ElasticsearchRestTemplate中提供的一系列方法来操作ES。

 @Autowired      private ElasticsearchRestTemplate elasticsearchRestTemplate;       // 根据id查询一条文档     public Person getPersonById(int id) {          return elasticsearchRestTemplate.queryForObject(GetQuery.getById(String.valueOf(id)), Person.class);      }        // 新增一条文档      public String createPerson(Person person) {          IndexQuery indexQuery = new IndexQueryBuilder()                  .withId(String.valueOf(person.getId()))                  .withObject(person)                  .build();          String documentId = elasticsearchRestTemplate.index(indexQuery);          return documentId;      }

更多详细配置信息可参考spring-data-elasticsearch的API官方文档