SpringBoot集成ElasticSearch的示例代码

目录
  • 一、Elasticseach介绍
    • 1.简单介绍
    • 2.对比关系:
    • 3.详细说明:
    • 4.查出数据的解释
  • 二、SpringBoot集成Elasticseach
    • 1.引入依赖
    • 2.添加配置
    • 3.创建pojo类与索引对应
    • 4.SpringData封装了基础的增删改查,自定义增删改查
    • 5.测试方法--增删改查

一、Elasticseach介绍

1.简单介绍

官网:开源搜索:Elasticsearch、ELK Stack 和 Kibana 的开发者 | Elastic

https://www.elastic.co/cn/

ElasticSeach详细安装教程--图文介绍超详细

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

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;
     * 品牌
    private  String brand;
     * 价格
    @Field(type = FieldType.Double)
    private  Double price;
     * 图片地址
    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) {
    @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的模板类
    private ItemRepository itemRepository;//Item的增删改查
    /**
     * 创建索引库
     */
    @Test
    public void testIndex(){
        this.elasticsearchTemplate.createIndex(Item.class);
        this.elasticsearchTemplate.putMapping(Item.class);
        //this.elasticsearchTemplate.deleteIndex();
    }
     * 插入与更新
    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);
     * 删除
    public void testDelete(){
        Item item=new Item(1L,"小米手机9","手机","小米",3999.00,"https:www.baidu.com");
        this.itemRepository.delete(item);
     * 查询
    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);
     * 调用自定义方法
    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));
     * 批量插入
    public void indexList() {
        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);
     * 高级查询
    public void testSearch(){
        //通过查询构建器工具构建--重点:QueryBuilders:词条、模糊、范围
        MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("title","手机");
        //获取结果集
        Iterable<Item> items = this.itemRepository.search(queryBuilder);
        items.forEach(System.out::println);
     * 重点--自定义查询
    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));
     * 重点--分页查询
    public void testPage(){
        queryBuilder.withQuery(QueryBuilders.matchQuery("category","手机"));
        queryBuilder.withPageable(PageRequest.of(1,2));
     * 重点--排序
    public void testSort(){
        queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));
}

到此这篇关于SpringBoot集成Elasticseach的文章就介绍到这了,更多相关SpringBoot集成Elasticseach内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot集成Elasticsearch过程实例

    1. 准备工作 需要提前安装好Elasticsearch,访问地址:http://127.0.0.1:9200/ 得到以下结果,得到cluster_name,下面配置使用. { "name" : "O8GslS3", "cluster_name" : "docker-cluster", "cluster_uuid" : "pviTqfXtR3GtnxF-Po-_aA", "ve

  • 解决SpringBoot整合ElasticSearch遇到的连接问题

    SpringBoot整合ElasticSearch的连接问题 failed to load elasticsearch nodes : org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{4J2eCGFXSZmM3xH72WIF5A}{192.168.252.200}{192.168.252.200:930

  • springboot中使用ElasticSearch的详细教程

    新建项目 新建一个springboot项目springboot_es用于本次与ElasticSearch的整合,如下图 引入依赖 修改我们的pom.xml,加入spring-boot-starter-data-elasticsearch <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</

  • springBoot集成Elasticsearch 报错 Health check failed的解决

    springBoot集成Elasticsearch 报错 Health check failed 今天集成Elasticsearch 时启动报错 报错信息如下: 2018-11-01 20:52:51.310 INFO [hstao-supersearch,,,] 8528 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8009 2018-11-01 20:52:51.314 INFO [hstao

  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    注意:适用于springboot或者springcloud框架 1.首先下载相关文件 2.然后需要去启动相关的启动文件 3.导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个dao接口继承一个类,在启动类上标注地址 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> &l

  • SpringBoot集成ElasticSearch的示例代码

    目录 一.Elasticseach介绍 1.简单介绍 2.对比关系: 3.详细说明: 4.查出数据的解释 二.SpringBoot集成Elasticseach 1.引入依赖 2.添加配置 3.创建pojo类与索引对应 4.SpringData封装了基础的增删改查,自定义增删改查 5.测试方法--增删改查 一.Elasticseach介绍 1.简单介绍 官网:开源搜索:Elasticsearch.ELK Stack 和 Kibana 的开发者 | Elastic https://www.elast

  • SpringBoot集成JPA的示例代码

    本文介绍了SpringBoot集成JPA的示例代码,分享给大家,具体如下: 1.创建新的maven项目 2. 添加必须的依赖 <!--springboot的必须依赖--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE

  • SpringBoot 集成 activiti的示例代码

    SpringBoot 集成 activiti  基础环境搭建 添加依赖 <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version> </dependency> 添加配置文件 server: tomcat: uri-

  • SpringBoot集成redis的示例代码

    目录 前言 一.redis是什么 二.集成redis步骤 三.代码演示 前言 redis想必小伙伴们即使没有用过,也是经常听到的,在工作中,redis用到的频率非常高,今天详细介绍一下SpringBoot中的集成步骤 一. redis是什么 用通俗点的话解释,redis就是一个数据库,直接运行在内存中,因此其运行速度相当快,同时其并发能力也非常强.redis是以key-value键值对的形式存在(如:"name":huage),它的key有五种常见类型: String:字符串 Hash

  • SpringBoot整合ElasticSearch的示例代码

    ElasticSearch作为基于Lucene的搜索服务器,既可以作为一个独立的服务部署,也可以签入Web应用中.SpringBoot作为Spring家族的全新框架,使得使用SpringBoot开发Spring应用变得非常简单.本文要介绍如何整合ElasticSearch与SpringBoot. 实体设计: 每一本书(Book)都属于一个分类(Classify),都有一个作者(Author). 生成这个三个实体类,并实现其get和set方法. SpringBoot配置修改: 1.修改pom.xm

  • SpringBoot集成MaxCompute的示例代码

    目录 1.SDK方式集成 1.1.依赖引入odps-sdk-core 1.2.编写连接工具类 1.2.1.重要类和方法说明 1.2.2 工具类测试 1.2.3 为什么要开启全表扫描 2.JDBC方式集成 2.2.编写连接工具类 2.2.1.重要类和方法说明 2.2.2 工具类测试 1.SDK方式集成 使用odps-sdk-core集成, 官方文档地址MaxCompute Java SDK介绍 1.1.依赖引入odps-sdk-core <properties> <java.version

  • Spring Boot与Kotlin 整合全文搜索引擎Elasticsearch的示例代码

    Elasticsearch 在全文搜索里面基本是无敌的,在大数据里面也很有建树,完全可以当nosql(本来也是nosql)使用. 这篇文章简单介绍Spring Boot使用Kotlin语言连接操作 Elasticsearch.但是不会做很详细的介绍,如果要深入了解Elasticsearch在Java/kotlin中的使用,请参考我之前编写的<Elasticsearch Java API 手册> https://gitee.com/quanke/elasticsearch-java/ 里面包含使

  • 使用Spring Boot集成FastDFS的示例代码

    这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包配置 我们使用Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0. <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>

  • SpringBoot集成swagger的实例代码

    Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步.Swagger 让部署管理和使用功能强大的API从未如此简单. 对于

  • Spring Boot集成Kafka的示例代码

    本文介绍了Spring Boot集成Kafka的示例代码,分享给大家,也给自己留个笔记 系统环境 使用远程服务器上搭建的kafka服务 Ubuntu 16.04 LTS kafka_2.12-0.11.0.0.tgz zookeeper-3.5.2-alpha.tar.gz 集成过程 1.创建spring boot工程,添加相关依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu

随机推荐