spring框架操作elasticsearch可以有很方法,
1、使用原始的客户端比如RestHighLevelClient(es官方提供并推荐的)、Jest等
2、使用spring data elasticsearch模块
本文讲述的是spring data elasticsearch的应用,应该这种使用方式对于使用过jpa的开发人员来说,入门门槛很低,简单的搜索查询完全可以胜任。
本文使用的是springboot 2.2.x,为什么呢,这是考虑到兼容性问题:
Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Boot |
---|---|---|---|
Moore | 3.2.x | 6.8.4 | 2.2.x |
Lovelace | 3.1.x | 6.2.2 | 2.1.x |
Kay[1] | 3.0.x[1] | 5.5.0 | 2.0.x[1] |
Ingalls[1] | 2.1.x[1] | 2.4.0 | 1.5.x[1] |
如上表所示,elasticsearch6.2以上版本推荐使用的springboot版本为2.2以上,这个版本针对elasticsearch来说一定比较大的改观就是与elasticsearch的通信增加了RestHighLevelClient的支持,Spring Data Elasticsearch 3.2.x以前的版本通信采用的是netty(9300端口),RestHighLevelClient通信是用的9200端口,所以这个在配置时要特别注意。
spring-data-elasticsearch具体使用如下所示:
1、加入依赖
代码语言:javascript复制 <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
</dependencies>
2、加入配置:
代码语言:javascript复制spring:
elasticsearch:
rest:
uris: http://172.21.46.26:9200
read-timeout: 10s
username: user
password: xxxx
3、设计一个entity类
代码语言:javascript复制@Getter
@Setter
@Document(indexName="smp-product",type="es-product")
public class ESProduct {
@Field
String id;
@Field
String mainTitle;
@Field
String subTitle;
@Field
private ESSupplier supplier;
}
4、设计一个repository借口
代码语言:javascript复制@Repository
public interface ESProductRepository extends ElasticsearchRepository<ESProduct,String> {
List<ESProduct> findByMainTitle(String mainTitle);
List<ESProduct> findByMainTitleLike(String mainTitle);
List<ESProduct> findByIdLike(String id);
List<ESProduct> findBySupplierAddress(String addr);
List<ESProduct> findBySupplierAddressLike(String addr);
}
5、配置elasticsearch repository扫描路径
代码语言:javascript复制@EnableElasticsearchRepositories(basePackages = {"jtl3d.smp.es.repository"})
插入demo:
代码语言:javascript复制 @Test
public void test(){
List<Product> prods = productRepository.findAll();
for(Product prod:prods){
ESProduct p = new ESProduct();
p.setId(prod.getId());
p.setMainTitle(prod.getMainTitle());
p.setSubTitle(prod.getSubTitle());
//获取供应商信息
Optional<Supplier> opt = supplierRepository.findById(prod.getSupplierId());
if(opt.isPresent()){
ESSupplier sup = new ESSupplier();
sup.setCompanyName(opt.get().getCompanyName());
sup.setAddress(opt.get().getAddress());
p.setSupplier(sup);
}
esproductRepository.save(p);
}
}
好了,一个简单的spring-data-elasticsearch使用已经完成,更多可以参考spring官网文档:
https://docs.spring.io/spring-data/elasticsearch/docs/3.2.5.RELEASE/reference/html/#reference