通过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官方文档。