SpringBoot集成Elasticseach

article/2025/10/5 4:04:06

目录

一、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: elasticsearchcluster-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 {@Idprivate  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;}@Overridepublic 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 {@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;//ES的模板类@Autowiredprivate ItemRepository itemRepository;//Item的增删改查/*** 创建索引库*/@Testpublic void testIndex(){this.elasticsearchTemplate.createIndex(Item.class);this.elasticsearchTemplate.putMapping(Item.class);//this.elasticsearchTemplate.deleteIndex();}/*** 插入与更新*/@Testpublic 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);}/*** 删除*/@Testpublic void testDelete(){Item item=new Item(1L,"小米手机9","手机","小米",3999.00,"https:www.baidu.com");this.itemRepository.delete(item);}/*** 查询*/@Testpublic 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);}/*** 调用自定义方法*/@Testpublic 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));}/*** 批量插入*/@Testpublic 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);}/*** 高级查询*/@Testpublic void testSearch(){//通过查询构建器工具构建--重点:QueryBuilders:词条、模糊、范围MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("title","手机");//获取结果集Iterable<Item> items = this.itemRepository.search(queryBuilder);items.forEach(System.out::println);}/*** 重点--自定义查询*/@Testpublic 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));}/*** 重点--分页查询*/@Testpublic 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));}/*** 重点--排序*/@Testpublic 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));}
}

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


http://chatgpt.dhexx.cn/article/1wAYqPg0.shtml

相关文章

Windows系统下载安装MinGW(包括32位和64位)

一、MinGW简介 MinGW是是将GCC编译器和GNU Binutils移植到Win32平台下的产物&#xff0c;包括一系列头文件&#xff08;Win32API&#xff09;、库和可执行文件。MinGW是从Cygwin&#xff08;1.3.3版&#xff09;基础上发展而来。GCC支持的语言大多在MinGW也受支持&#xff0c;其…

MySQL寻找特定字符后的字符串

“日边清梦断,镜里朱颜改” 在操作数据库的某些情况下,我们需要对其中一字段的最后几个字做修改,如下图,把老师改为学生 我找了半天,好像没找到mysql中有合适的函数,能找到最后一个/符号并且修改后面的字符串.需要用好几个函数嵌套使用.如下: select 处理前 as status,org…

支付宝支付功能的实现

支付宝支付功能实现 一.环境准备 二.配置沙箱环境 1.浏览器搜索 支付宝开放平台 2.找到开发服务&#xff0c;选择沙箱 3.根据文档提示&#xff0c;一步步配置 4.配置完成后的样子 5.下载好支付宝手机开放平台助手&#xff0c;可以获取应用私钥 **注意&#xff1a;**应用公…

针对Spring/Gradle启动失败的一些通用解决方案

文章目录 0 前言1 更改Gradle JVM的Java JDK1.1 执行JUnit测试时&#xff0c;Gradle报错 0 前言 当你对Spring/Gradle启动失败的错误信息一筹莫展时&#xff0c;不妨试试以下这些通用的解决方案 1 更改Gradle JVM的Java JDK Settings -> Build, Execution, Deployment -&…

13123

111 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必不…

编译JSqlparser

这个东西是用来解析sql的。既然要编译源码&#xff0c;第一步当然要下载源码了。 要下源码当然是到世界最大同志网站了: https://github.com/JSQLParser/JSqlParser 项目导入idea&#xff0c;缺少源码&#xff0c;原来需要javacc来生成代码。 自然我们需要安装javacc这个东西&…

jsqlparser:修改语法定义(JSqlParserCC.jjt)实现UPSERT支持Phoenix语法ON DUPLICATE KEY IGNORE

最近在用jsqlparser4.5解析SQL时遇到了一个问题&#xff0c; 如下是apache phoenix的UPSERT语句 UPSERT INTO TEST (ID, COUNTER) VALUES (123, 0) ON DUPLICATE KEY IGNOREON DUPLICATE KEY IGNORE即为当主键重复时忽略&#xff0c;这与MySQL的IGNORE语法不同&#xff1a; …

jsqlparser mysql_java sql解析器比较druid sql parser vs jsqlparser vs fdb-sql-parser

先上结论。 功能上&#xff1a;druid sql parser(支持分区、WITH、DUAL等。使用mysql语法解析时&#xff0c;已知oracle的一些操作符会被转为mysql&#xff0c;如|| 转为OR。使用oracle解析器时&#xff0c;union all里面的括号会被移到外面&#xff0c;从而导致可能执行出错) …

JSqlParser4.3版本无法解析mysql中JSON_OBJECT函数抛出ParseException异常

2022年3月31日&#xff0c;找了一下午的bug bug 已经提交issues&#xff0c;详情请看GitHub&#xff0c;地址&#xff1a;https://github.com/JSQLParser/JSqlParser/issues/1504 使用JSqlparser4.3版作者提供的补丁版后解决&#xff0c;下载地址&#xff1a;https://download.…

JSqlparser 使用攻略(高效的SQL解析工具)

JSqlparser github地址 目录 Maven 引用远程仓库依赖包 SQL解析获取SQL中的信息创建Select的方式创建Select&#xff08;非SQL String 创建&#xff09; Insert 插入字段和值where条件中字段替换解析SQL例子获取所有tableNames自动生成别名SQL函数单表where条件拼装JOIN 拼装 校…

jsqlparser 简介、中文文档、中英对照文档 下载

jsqlparser 文档 下载链接&#xff08;含jar包、源码、pom&#xff09; 组件名称中文-文档-下载链接中英对照-文档-下载链接jsqlparser-0.9.5.jarjsqlparser-0.9.5-API文档-中文版.zipjsqlparser-0.9.5-API文档-中英对照版.zipjsqlparser-1.0.jarjsqlparser-1.0-API文档-中文版…

java使用jsqlparser实现自定义转换

jsqlparser描述&#xff1a; JSqlParser 解析 SQL 语句并将其转换为 Java 类的层次结构。基本上的sql关键字和函数都可以被jsqlparser解析成对象层层包装。 实现的功能&#xff1a; 基础sql查询&#xff0c;条件查询&#xff0c;字段和表得别名&#xff0c;排序&#xff0c;…

JSQLParser碰到的问题

JSQLParser是github上一个开源的项目&#xff0c;专门解析SQL&#xff0c;可以轻松地得到一条SQL的列、表、条件等对象&#xff0c; P.S. https://github.com/JSQLParser/JSqlParser 最近在做一个功能开发的时候&#xff0c;被他困扰了下&#xff0c;从需求来讲&#xff0c;就是…

JSqlParser-SQL解析处理

一、介绍 JSqlParse是一款很精简的sql解析工具&#xff0c;将sql语句转成Java对象。 官网&#xff1a;JSqlParser - Home 用法&#xff1a;可以用于数据权限处理&#xff0c;拦截sql解析改写sql等等。 二、版本 <dependency><groupId>com.github.jsqlparser&l…

JSQLParser 解析复杂SQL 2.0

前言 这段时间&#xff0c;为了开发数据中台项目&#xff0c;我去研究学习了JSQLParser&#xff08;Java中解析SQL语句的工具&#xff09;&#xff0c;并且结合网上资料&#xff0c;写了一个初步的SQL解析工具类... 正文 时隔三天&#xff0c;我又回来了&#xff0c; 因为之前J…

JSqlParser入门系列(1)-JSqlParser简介及入门案例

简介 JSqlParser是一个SQL语句解析器。它将SQL转换为Java类的可遍历层次结构。 支持Oracle&#xff0c;SqlServer&#xff0c;MySQL&#xff0c;PostgreSQL等常用数据库。但各种数据库系统的SQL语法都在动态变化&#xff0c;可以解析某些&#xff08;不是全部&#xff09;。 …

JSqlParser

JSqlParser 关于SqlParser引言&#xff1a; Java 生态中较为流行的 SQL Parser 有以下几种&#xff1a; fdb-sql-parser 是 FoundationDB 在被 Apple 收购前开源的 SQL Parser&#xff08;不支持很复杂的SQL&#xff09;&#xff0c;目前已无人维护。jsqlparser 是基于 Java…

Sql解析转换之JSqlParse完整介绍

1、 jsqlparse介绍 JSqlParse是一款很精简的sql解析工具&#xff0c;它可以将常用的sql文本解析成具有层级结构的“语法树”&#xff0c;我们可以针对解析后的“树节点&#xff08;也即官网里说的有层次结构的java类&#xff09;”进行处理进而生成符合我们要求的sql形式。 官…

相机内参模型Kannala-Brandt/fisheye/pinhole+equi详解

文章目录 1. 论文总述2. pinholeradtan无法建模鱼眼相机3. 内参模型3.1 Radially Symmetric Model3.2 Full Model3.3 affine transformation3.4 Backward Model 4. 标定4.1 ORIFL190-3 lens 可以被标定 5. 内参结果验证参考文献 本博客主要从fisheye论文角度&#xff0c;详细介…

python-opencv实现pinhole相机图像转fisheye相机图像

根据鱼眼相机公式rff*θ&#xff0c;其中θatan(rc/f)&#xff0c;即可实现从pinhole相机模型到fisheye相机模型的像素映射。可自行设置焦距&#xff0c;我使用如下代码完成了将cityscape数据集转换为鱼眼视角。 import numpy as np import cv2 import osclass ConvertFisheye…