spring-data-elasticsearch有两种方式连接Elasticsearch,一种是TCP的方式,通过9300端口连接,还有一种是HTTP的方式,通过9200端口连接。腾讯云ES提供了9200端口的HTTP方式来连接ES。其中spring-data-elasticsearch的版本和Elasticsearch的版本需要匹配和兼容,本文使用的elasticsearch版本为6.4.3。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
其中Elasticsearch版本和Spring-data-elasticsearch版本之间的关系可参考下图(图片来自官网):
向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);
}
}
使用注入的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官方文档。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。