springboot集成elasticseach(代码片段)

小小张自由—>张有博 小小张自由—>张有博     2023-03-09     378

关键词:

目录

一、Elasticseach介绍

1.简单介绍

2.对比关系:

3.详细说明:

4.查出数据的解释

 二、SpringBoot集成Elasticseach

1.引入依赖

2.添加配置

3.创建pojo类与索引对应

4.SpringData封装了基础的增删改查,自定义增删改查

5.测试方法--增删改查

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。 


一、Elasticseach介绍

1.简单介绍

官网:开源搜索:Elasticsearch、ELK Stack 和 Kibana 的开发者 | Elastichttps://www.elastic.co/cn/

ElasticSeach详细安装教程--图文介绍超详细:ElasticSeach详细安装教程--图文介绍超详细_小小张自由—>张有博-CSDN博客ElasticSeach详细安装教程--图文介绍超详细。​Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。Elasticsearch 是一个基于JSON的分布式搜索和分析引擎。https://blog.csdn.net/promsing/article/details/122722302

令人记忆深刻的口号:能够发现意料之中以及意料之外的情况

Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。是一种全文检索技术。

Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。Elasticsearch 是索引、搜索和分析魔法发生的地方。

Elasticsearch 是一个基于JSON的分布式搜索和分析引擎。

Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

2.对比关系:

索引(indices)--------------------------------Databases 数据库

  类型(type)-----------------------------Table 数据表

     文档(Document)----------------Row 行

	   字段(Field)-------------------Columns 列

3.详细说明:

概念

说明

索引库(indices)

indices是index的复数,代表许多的索引,

类型(type)

类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念

文档(document)

存入索引库原始的数据。比如每一条商品信息,就是一个文档

字段(field)

文档中的属性

映射配置(mappings)

字段的数据类型、属性、是否索引、是否存储等特性

4.查出数据的解释

 took:查询花费时间,单位是毫秒
 time_out:是否超时
 _shards:分片信息
 hits:搜索结果总览对象 
   total:搜索到的总条数
   max_score:所有结果中文档得分的最高分
   hits:搜索结果的文档对象数组,每个元素是一条搜索到的文档信息 
     _index:索引库
     _type:文档类型
     _id:文档id
     _score:文档得分
     _source:文档的源数据


 二、SpringBoot集成Elasticseach

1.引入依赖

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

2.添加配置

spring:
  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 192.168.7.132:9300

3.创建pojo类与索引对应

package com.leyou.elasticsearch.pojo;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

/**
 * 创建pojo类与索引对应
 *
 * @author Promsing(张有博)
 * @version 1.0.0
 * @since 2022/1/26 - 20:35
 */
@Document(indexName = "item", type = "docs", shards = 1, replicas = 0)
public class Item 
    @Id
    private  Long id;


    /**
     * 标题
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    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(type = FieldType.Keyword)
    private  String images;

    public Long getId() 
        return id;
    

    public void setId(Long id) 
        this.id = id;
    

    public String getTitle() 
        return title;
    

    public void setTitle(String title) 
        this.title = title;
    

    public String getCategory() 
        return category;
    

    public void setCategory(String category) 
        this.category = category;
    

    public String getBrand() 
        return brand;
    

    public void setBrand(String brand) 
        this.brand = brand;
    

    public Double getPrice() 
        return price;
    

    public void setPrice(Double price) 
        this.price = price;
    

    public String getImages() 
        return images;
    

    public void setImages(String images) 
        this.images = images;
    

    public Item() 
    

    public Item(Long id, String title, String category, String brand, Double price, String images) 
        this.id = id;
        this.title = title;
        this.category = category;
        this.brand = brand;
        this.price = price;
        this.images = images;
    

    @Override
    public String toString() 
        return "Item" +
                "id=" + id +
                ", title='" + title + '\\'' +
                ", category='" + category + '\\'' +
                ", brand='" + brand + '\\'' +
                ", price=" + price +
                ", images='" + images + '\\'' +
                '';
    

4.SpringData封装了基础的增删改查,自定义增删改查

这里需要继承接口-ItemRepository 

/**
 * 自定义的增删改查接口
 *
 * @author Promsing(张有博)
 * @version 1.0.0
 * @since 2022/1/27 - 15:10
 */
public interface ItemRepository extends ElasticsearchRepository<Item,Long> 

    List<Item> findByTitle(String title);

    List<Item> findByPriceBetween(Double d1,Double d2);

5.测试方法--增删改查

package com.leyou.elasticsearch;

import com.leyou.elasticsearch.dao.ItemRepository;
import com.leyou.elasticsearch.pojo.Item;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * 测试ES的增删改查
 *
 * @author Promsing(张有博)
 * @version 1.0.0
 * @since 2022/1/26 - 20:57
 */
@SpringBootTest(classes = ElasticsearchApplication.class)
@RunWith(SpringRunner.class)
public class ElasticsearchTest 

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;//ES的模板类

    @Autowired
    private ItemRepository itemRepository;//Item的增删改查



    /**
     * 创建索引库
     */
    @Test
    public void testIndex()

        this.elasticsearchTemplate.createIndex(Item.class);
        this.elasticsearchTemplate.putMapping(Item.class);
        //this.elasticsearchTemplate.deleteIndex();


    

    /**
     * 插入与更新
     */
    @Test
    public void testCreate()

        Item item = new Item(1L,"小米手机9","手机","小米",3999.00,"https:www.baidu.com");
        Object save = this.itemRepository.save(item);

        List<Item> list = new ArrayList<>();
        list.add(new Item(2L, "坚果手机R1", " 手机", "锤子", 3699.00, "http://image.leyou.com/123.jpg"));
        list.add(new Item(3L, "华为META10", " 手机", "华为", 4499.00, "http://image.leyou.com/3.jpg"));
        // 接收对象集合,实现批量新增
        Iterable<Item> items = itemRepository.saveAll(list);
        System.out.println(items);


    

    /**
     * 删除
     */
    @Test
    public void testDelete()

        Item item=new Item(1L,"小米手机9","手机","小米",3999.00,"https:www.baidu.com");
        this.itemRepository.delete(item);

    


    /**
     * 查询
     */
    @Test
    public void testFind()
        System.out.println("-----主键查询------");
        Optional<Item> byId = this.itemRepository.findById(1L);
        System.out.println(byId.get());

        System.out.println("-----查询全部------");

        Iterable<Item> all = this.itemRepository.findAll();
        all.forEach(i-> System.out.println(i));

        System.out.println("-----排序查询(升序降序)------");
        Iterable<Item> price = this.itemRepository.findAll(Sort.by("price").descending());
        price.forEach(System.out::println);
    

    /**
     * 调用自定义方法
     */
    @Test
    public void testFindByU()
        List<Item> phone = this.itemRepository.findByTitle("手机");
//        phone.forEach(i->
//            System.out.println(i);
//        );

        List<Item> byPriceBetween = this.itemRepository.findByPriceBetween(4000.0, 5000.0);
        byPriceBetween.forEach(i-> System.out.println(i));
    

    /**
     * 批量插入
     */
    @Test
    public void indexList() 
        List<Item> list = new ArrayList<>();
        list.add(new Item(1L, "小米手机7", "手机", "小米", 3299.00, "http://image.leyou.com/13123.jpg"));
        list.add(new Item(2L, "坚果手机R1", "手机", "锤子", 3699.00, "http://image.leyou.com/13123.jpg"));
        list.add(new Item(3L, "华为META10", "手机", "华为", 4499.00, "http://image.leyou.com/13123.jpg"));
        list.add(new Item(4L, "小米Mix2S", "手机", "小米", 4299.00, "http://image.leyou.com/13123.jpg"));
        list.add(new Item(5L, "荣耀V10", "手机", "华为", 2799.00, "http://image.leyou.com/13123.jpg"));
        // 接收对象集合,实现批量新增
        itemRepository.saveAll(list);
    

    /**
     * 高级查询
     */
    @Test
    public void testSearch()

        //通过查询构建器工具构建--重点:QueryBuilders:词条、模糊、范围
        MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("title","手机");
        //获取结果集
        Iterable<Item> items = this.itemRepository.search(queryBuilder);

        items.forEach(System.out::println);

    

    /**
     * 重点--自定义查询
     */
    @Test
    public void testNative()
        // 构建自定义查询构建器
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本查询条件
        queryBuilder.withQuery(QueryBuilders.matchQuery("title","手机"));
        // 查询分页结果集
        Page<Item> itemPage = this.itemRepository.search(queryBuilder.build());
        System.out.println(itemPage.getTotalPages());
        System.out.println(itemPage.getTotalElements());
        itemPage.forEach(i-> System.out.println(i));

    

    /**
     * 重点--分页查询
     */
    @Test
    public void testPage()
        // 构建自定义查询构建器
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本查询条件
        queryBuilder.withQuery(QueryBuilders.matchQuery("category","手机"));
        queryBuilder.withPageable(PageRequest.of(1,2));
        // 查询分页结果集
        Page<Item> itemPage = this.itemRepository.search(queryBuilder.build());
        System.out.println(itemPage.getTotalPages());
        System.out.println(itemPage.getTotalElements());
        itemPage.forEach(i-> System.out.println(i));

    

    /**
     * 重点--排序
     */
    @Test
    public void testSort()
        // 构建自定义查询构建器
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本查询条件
        queryBuilder.withQuery(QueryBuilders.matchQuery("category","手机"));
        queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));
        // 查询分页结果集
        Page<Item> itemPage = this.itemRepository.search(queryBuilder.build());
        System.out.println(itemPage.getTotalPages());
        System.out.println(itemPage.getTotalElements());
        itemPage.forEach(i-> System.out.println(i));

    

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。 

elasticseach

1、Elasticseach对复杂分布式机制的透明隐藏特性分片、clusterdiscovery、shared负载均衡,shared副本请求路由、集群扩容、shared重分配2、Elasticseach的垂直扩容与水平扩容(1)垂直扩容:采购更强大的服务器(2)水平扩容:扩容对应用程序透... 查看详情

springboot.03.springboot集成jsp

SpringBoot.03.SpringBoot集成jsp前言准备工作jsp集成案例集成步骤1.新建Module2.pom.xml3.Springboot03JspApplication.java4.application.yml5.index.jsp6.JspController.java7.测试问题分析解决方案1.springboot:run2.设置Workingdirectory修改jsp无 查看详情

springboot.03.springboot集成jsp(代码片段)

SpringBoot.03.SpringBoot集成jsp前言准备工作jsp集成案例集成步骤1.新建Module2.pom.xml3.Springboot03JspApplication.java4.application.yml5.index.jsp6.JspController.java7.测试问题分析解决方案1.springboot:run2.设置Workingdirectory修改jsp无 查看详情

springboot.03.springboot集成jsp(代码片段)

SpringBoot.03.SpringBoot集成jsp前言准备工作jsp集成案例集成步骤1.新建Module2.pom.xml3.Springboot03JspApplication.java4.application.yml5.index.jsp6.JspController.java7.测试问题分析解决方案1.springboot:run2.设置Workingdirectory修改jsp无 查看详情

springboot使用·上篇(springboot注解+集成jdbc+集成druid(德鲁伊)+sql监控)(代码片段)

文章目录SpringBoot的使用SpringBoot注解@SpringBootApplication@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan@Configuration@Bean@ConfigurationPropertiesSpringBoot集成JDBC 查看详情

#springboot集成netty(代码片段)

SpringBoot集成Netty文章目录SpringBoot集成Netty背景描述Netty与SpringBoot整合关注点Netty组件Bootstrap、ServerBootstrapChannelEventLoop、EventLoopGroupChannelHandlerChannelPipelineByteBufPom依赖Yml配置整合Netty步骤服务端客户端背景描述如果需要在Spri 查看详情

springboot集成elasticsearch

点击跳转 查看详情

springboot集成elasticsearch

点击跳转 查看详情

springbootredis缓存(cache)集成

SpringBoot集成教程SpringBoot介绍SpringBoot开发环境搭建(Eclipse)SpringBootHelloWorld(restful接口)例子springboot连接Mysqlspringboot配置druid连接池连接mysqlspringboot集成mybatis(1)springboot集成mybatis(2)–使用pagehelper实现分页springboot集 查看详情

rocketmq集成springboot(代码片段)

RocketMQRocketMQ集成SpringBoot1.项目配置1.1新建项目1.2引入依赖2.生产者实现3.消费者实现总结RocketMQ集成SpringBoot1.项目配置1.1新建项目新建两个SpringBoot项目,项目名分别为:springboot-rocketmq-consumer、springboot-rocketmq-producter; 查看详情

springboot(十八):使用springboot集成fastdfs

SpringBoot(十八):使用SpringBoot集成FastDFS环境:SpringBoot最新版本1.5.9、jdk使用1.8、tomcat8.0功能:使用SpringBoot将文件上传到分布式文件系统FastDFS中。一、pom包配置<dependency><groupId>org.csource</groupId><artifactId> 查看详情

springboot配置全系列

基础配置maven的profile方式springboot的profile使用方式开发模式配置配置tomcat配置web相关配置日志配置JSP配置数据源集成配置集成druid集成mybatis集成Freemarker集成redis集成dubbo集成zookeeper集成rocketmq 查看详情

springboot集成freemarker

     查看详情

springboot集成mybatis通用mapper使用总结

 springboot集成MyBatis通用Mapper使用总结2019年  参考资料:Springboot集成MyBatis通用MapperSpringBoot框架之通用mapper插件(tk.mybatis)springboot如何优雅的使用mybatis-spring-boot-starter三分钟让你看懂Springboot中Mybatis的使用SpringB 查看详情

springboot集成hbase

springboot集成hbase会启动报错主要因为SpringBoot内嵌了Web容器,方便对应用进行微服务化开发和部署。所以打算将HBase的业务应用作为一个单服务进行开发和发布,其他相关的子系统通过RESTfulAPI来访问。搭建项目环境时,需要注意... 查看详情

springboot-springboot集成rabbitmq

一、SpringBoot集成RabbitMQ创建两个模块,一个命名springboot-send,一个命名springboot-receive在两个工程的pom.xml配置文件中引入AMQP依赖<dependencies><dependency><groupId>org.springframework.boot</groupId 查看详情

springboot集成druid数据源

...般都是使用application.prperties文件来配置。   1,使用springboot配置文件(application.properties)集成。  2,使用配置类集成。      SpringBoot提倡基于java的配置,尽管你可以使用XML源调用SpringApplication.run(),不过还是建议你... 查看详情

springboot集成jsp

springboot集成jsp需要的依赖如下:<!--配置servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId></dependency><!--配置jspjstl的支持- 查看详情