通過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版本之間的關係可參考下圖(圖片來自官網):

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