一、简介
这里将介绍elasticsearch在spring data中的使用。es版本为:6.2.2。spring版本为:5.0.4.RELEASE。
下面仅列出部分操作,更多的操作请查看api接口。
二、步骤
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、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>
3、定义bean类 Stu
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; } }
4、定义repository类StuEsRepository
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); }
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)); } }