elasticsearch–与spring_data整合
文章目录
一、简介
这里将介绍elasticsearch在spring data中的使用。es版本为:6.2.2。spring版本为:5.0.4.RELEASE。下面仅列出部分操作,更多的操作请查看api接口。
二、步骤
2.1 添加关键maven依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.0</version>
</dependency>
2.2 spring配置文件spring-es.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/elasticsearch
http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<context:component-scan base-package="com.dragon.study.elasticsearch" />
<!-- 搜索DAO 扫描 -->
<elasticsearch:repositories base-package="com.dragon.study.elasticsearch.repository" />
<!-- 配置Client -->
<elasticsearch:transport-client id="client" cluster-nodes="192.168.0.107:9300" cluster-name="my-application" />
<!-- 配置搜索模板 -->
<bean id="elasticsearchTemplate"
class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="client" />
</bean>
</beans>
2.3 定义bean类Stu.java
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import java.io.Serializable;
import java.util.Date;
@Document(indexName = "stu", type = "doc")
public class Stu implements Serializable {
private static final long serialVersionUID = 566392553987979222L;
@Id
@Field
private Long id;
@Field()
private String stuId;
@Field
private String stuName;
@Field
private Date createTime;
public Stu() {
}
public Stu(String stuId, String stuName) {
this.stuId = stuId;
this.stuName = stuName;
}
public Stu(Long id, String stuId, String stuName) {
this.id = id;
this.stuId = stuId;
this.stuName = stuName;
}
public String getStuId() {
return stuId;
}
public void setStuId(String stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
2.4 定义repository类StuEsRepository.java
import com.dragon.study.elasticsearch.bean.Stu;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;
public interface StuEsRepository extends ElasticsearchRepository<Stu, Long> {
/**
* 根据stuId查询
* @param stuId
* @return
*/
Stu getByStuId(String stuId);
/**
* 获取查询列表
* @param stuName
* @return
*/
List<Stu> getListByStuName(String stuName);
/**
* 分页查询
* @param stuName
* @param pageable
* @return
*/
Page<Stu> getPageByStuName(String stuName, Pageable pageable);
}
2.5 示例
import com.alibaba.fastjson.JSON;
import com.dragon.study.elasticsearch.bean.Stu;
import com.dragon.study.elasticsearch.repository.StuEsRepository;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.WildcardQueryBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import java.util.Date;
import java.util.List;
public class EsSpringMain {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring-es.xml");
StuEsRepository stuEsRepository = ac.getBean(StuEsRepository.class);
//添加或更新
Stu st = new Stu(6L,"006", "小东");
st.setCreateTime(new Date());
stuEsRepository.save(st);
//删除所有数据
stuEsRepository.deleteAll();
//根据id删除数据
stuEsRepository.deleteById(6L);
//根据id查找数据
Stu stu = stuEsRepository.findById(5L).get();
System.out.println(stu.getCreateTime());
//根据指定属性查找
Stu stu = stuEsRepository.getByStuId("005");
System.out.println(JSON.toJSONString(stu));
//分页查找
Pageable pageable = PageRequest.of(0, 3);
Page<Stu> stuPage = stuEsRepository.getPageByStuName("小", pageable);
System.out.println(JSON.toJSONString(stuPage));
//查询所有数据
Iterable<Stu> it = stuEsRepository.findAll();
it.forEach(s -> {
System.out.println(JSON.toJSONString(s));
});
//查询个数
long cnt = stuEsRepository.count();
System.out.println(cnt);
//根据指定属性获取列表
List<Stu> stuList = stuEsRepository.getListByStuName("小");
System.out.println(JSON.toJSONString(stuList));
//指定模糊查找
QueryBuilder query = new WildcardQueryBuilder("stuName", "*小*");
SearchQuery searchQuery = new NativeSearchQuery(query);
searchQuery.setPageable(pageable);
stuPage = stuEsRepository.search(searchQuery);
System.out.println(JSON.toJSONString(stuPage));
}
}