SpringBoot整合Spring Data Elasticsearch

Spring Data Elasticsearch提供了ElasticsearchTemplate工具类,实现了POJO与elasticsearch文档之间的映射

elasticsearch本质也是存储数据,它不支持事物,但是它的速度远比数据库快得多,

可以这样来对比elasticsearch和数据库

索引(indices)--------数据库(databases)
类型(type)------------数据表(table)
文档(Document)---------------- 行(row)
字段(Field)-------------------列(Columns ) 

整合:

  1,在SprinBoot工程中引入jar包

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

  2,配置文件

spring.data.elasticsearch.cluster-name=elasticsearch  //名字必须和elasticsearch.yml里面的cluster.name相同
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
spring.data.elasticsearch.repositories.enabled=true

  3,创建实体,并对类和属性进行标注

@Document(indexName = "item",type = "docs", shards = 1, replicas = 0)//标记为文档类型,ndexName:对应索引库名称type:对应在索引库中的类型,shards:分片数量,默认5,replicas:副本数量,默认1
public class Item {
    @Id //主键
    private Long id;

    @Field(type = FieldType.Text, analyzer = "ik_max_word") //标记为成员变量  FieldType,可以是text、long、short、date、integer等  text:存储数据时候,会自动分词,并生成索引  keyword:存储数据时候,不会分词建立索引  analyzer:分词器名称
    private String title; //标题

    @Field(type = FieldType.Keyword)
    private String category;// 分类

    @Field(type = FieldType.Keyword)
    private String brand; // 品牌

    @Field(type = FieldType.Double)
    private Double price; // 价格

    @Field(index = false, type = FieldType.Keyword)//index:是否索引
    private String images; // 图片地址

  4.引入模板ElasticsearchTemplate

   @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

  5.创建一个索引

     //添加索引
    @Test
    public void addIndex() {
        elasticsearchTemplate.createIndex(Item.class);
    }

  6.删除索引

    //删除索引
    @Test
    public void delete(){
        elasticsearchTemplate.deleteIndex("item");
    }

  7.新增对象

  继承Repository提供的一些子接口,就能具备各种基本的CRUD功能,这里继承ElasticsearchCrudRepository

  首先定义一个对象的接口

public interface ItemRepository extends ElasticsearchCrudRepository<Item,Long> {

}

  然后注入ItemRepository

   @Autowired
    private ItemRepository itemRepository;

  新增对象

    //新增一个对象
    @Test
    public void insert(){
        Item item = new Item(2L,"坚果R1","手机","锤子",2500.00,"http://image.baidu.com/13123.jpg");
        //Order order = new Order(20180020,"菜单");
        itemRepository.save(item);
    }

  批量新增

    //批量新增
    @Test
    public void insertList(){
        List<Item> list = new LinkedList<>();
        list.add(new Item(9L,"华为p20","手机","华为",3500.00,"http://image.baidu.com/13123.jpg"));
        list.add(new Item(10L,"华为p30","手机","华为",5450.00,"http://image.baidu.com/13123.jpg"));
        list.add(new Item(11L,"华为p30 pro","手机","华为",6980.00,"http://image.baidu.com/13123.jpg"));
        itemRepository.saveAll(list);
    }

  8.查询

    //根据字段查询所有
    @Test
    public void queryAll(){
        //升序,相应降序为dscending
        Iterable<Item> items = this.itemRepository.findAll(Sort.by("price").ascending());
        for (Item item : items){
            System.out.println(item);
        }
    }

  9.自定义查询方法

  Spring Data 的另一个强大功能,是根据方法名称自动实现功能,你的方法名叫做:findByTitle,那么它就知道你是根据title查询,然后自动帮你完成,无需写实现类。当然,方法名称要符合一定的约定:

                  上图是截取csdn上博主我要取一个响亮的昵称的图

   根据手机名查找手机

    //自定义方法,根据Title查询
    @Test
    public void findByTitle(){
        Item item = this.itemRepository.findByTitle("坚果pro");
        System.out.println(item);
    }

  区间查询

    //根据区间查询
    @Test
    public void queryByPriceBetween(){
        List<Item> list = this.itemRepository.findByPriceBetween(2000.00, 3500.00);
        for (Item item : list) {
            System.out.println("item = " + item);
        }
    }

  模糊查询

     //模糊查询
    @Test
    public void queryLikeTitle(){
        List<Item> list = this.itemRepository.findByTitleLike("R2");
        for (Item item : list){
            System.out.println(item);
        }
    }

  使用自定义方法需要在接口里面申明方法

public interface ItemRepository extends ElasticsearchCrudRepository<Item,Long> {

    Item findByTitle(String title);

    List<Item> findByPriceBetween(double price1, double price2);

    List<Item> findByTitleLike(String title);
}

  10.自定义查询

    //自定义查询,查询数目等
    @Test
    public void matchQuery(){
        // 构建查询条件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本分词查询
        queryBuilder.withQuery(QueryBuilders.matchQuery("title","坚果"));
        //获取结果
        Page<Item> items = (Page<Item>) this.itemRepository.findAll();
        //条数
        long total = items.getTotalElements();
        System.out.println("total = "+total);
        for (Item item : items){
            System.out.println(item);
        }
    }

关键的是NativeSearchQueryBuilder这个类

  分页查询

    //分页查询
    @Test
    public void queryByPage(){
        NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
        nativeSearchQueryBuilder.withQuery(QueryBuilders.termQuery("category","手机"));
        int page = 0;
        int size = 2;
        nativeSearchQueryBuilder.withPageable(PageRequest.of(page,size));
        Page<Item> items = (Page<Item>) this.itemRepository.findAll();
        long total = items.getTotalElements();
        int totalPage = items.getTotalPages();
        int nowPage = items.getNumber();
        int pageSize = items.getSize();
        System.out.println("总条数 = "+total);
        System.out.println("总页数 = "+totalPage);
        System.out.println("当前页 = "+nowPage);
        System.out.println("每页大小 = "+pageSize);
        for (Item item : items){
            System.out.println(item);
        }
    }

  还有很多,就不意义列举

在elasticsearch-head上查看数据

关于安装elasticsearch-head,参考:https://www.cnblogs.com/xuwenjin/p/8792919.html,

  Spring Data Elasticsearch文档:https://docs.spring.io/spring-data/elasticsearch/docs/3.1.10.RELEASE/reference/html/  

原文地址:https://www.cnblogs.com/steakliu/p/11553199.html

时间: 2024-10-31 19:53:46

SpringBoot整合Spring Data Elasticsearch的相关文章

SpringBoot整合Spring Data Solr

此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId></dependency> 2.

elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式进行连接 3.2 Transport 连接 端口 9300 这种连接方式对应于架构图中的Transport这一层,这种客户端连接方式是直接连接ES的节点,使用TCP的方式进行连接 4. ES提供了多种

elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词

elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/releases ik分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases 下载源码需要使用maven打包 下载构建好的压缩包解压后放直接在elasticsearch安装目录下 plugins文件夹下,可以重命名 1.在es中设置分

Spring Boot 整合Spring Data JPA

Spring Boot整合Spring Data JPA 1)加入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> &l

Spring Data ElasticSearch 使用

1.SpringDataES环境搭建        Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操作,将原始操作elasticSearch的客户端API        进行封装 .Spring Data为Elasticsearch项目提供集成搜索引擎.Spring Data Elasticsearch POJO的关键功能区域        为中心的模型与Elastichsearch交互文档和轻松地编写一个存储库数据访问

使用JAVA操作ElasticSearch(Java API 和Spring Data ElasticSearch)

Java API 我的ElasticSearch集群的版本是6.2.4,导入elasticsearch相关的maven依赖也是6.2.4,不同版本的api可能会有差异 一:maven依赖 <!--elasticsearch核心依赖--> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version

Spring Data ElasticSearch的使用十个小案例

1.什么是Spring Data Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务. Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作.除了CRUD外,还包括如分页.排序等一些常用的功能. 2.什么是Spring Data ElasticSearch Spring Data ElasticSearch 基于 spring data

Spring Data ElasticSearch的使用

1.什么是Spring Data Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务. Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作.除了CRUD外,还包括如分页.排序等一些常用的功能. 2.什么是Spring Data ElasticSearch Spring Data ElasticSearch 基于 spring data

spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)

最近上班太忙所以耽搁了给大家分享实战springboot 框架的使用. 下面是spring boot 整合多个框架的使用. 首先是准备工作要做好. 第一  导入框架所需的包,我们用的事maven 进行对包的管理. 以上的举例是本人的H5DS的真实的后台管理项目,这个项目正在盛情融资中,各位多多捧点人场.关注一下软件发展的动态,说不定以后就是您的生活不可或缺的软件哟. 点击打开链接.闲话少说.现在切入正题. 第二,写点配置文件 第三,spring data -设计一个简单的po关系,这里需要下载一