elasticsearch–与spring_data整合

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));
    }
}
发布了274 篇原创文章 · 获赞 95 · 访问量 50万+

猜你喜欢

转载自blog.csdn.net/chinabestchina/article/details/104955580