通過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官方文檔