当前位置: 首页 > news >正文

28.JavaWeb-Elasticsearch

1.Elasticsearch概述

        Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发,基于Apache协议的开源项目,具有实时搜索,稳定,可靠,快速的特点。

1.1 全文检索引擎

        分为通用搜索引擎(百度、谷歌)与站内搜索引擎,全文检索在处理非结构化文本数据方面非常有用

1.2 结构化数据与非结构化数据

        每个属性都有对应的字段的数据就是结构化数据,反之无法用二维表表述的数据就是非结构化数据

1.3 ES全文检索的原理

        Elasticsearch基于Lucene库构建而成,它使用了倒排索引的方式来实现全文检索。

1.3.1 倒排索引

        就是查找内容,根据内容得到内容所在文档

1.3.2 正排索引

        就是通过路径找到文档,再从文档找某段内容

2. ES安装

Elasticsearch:官方分布式搜索和分析引擎 | Elastic在 RESTful 风格的分布式免费开源搜索和分析引擎开源中,Elasticsearch 处于领先地位,速度快,可实现水平可扩展性和可靠性,并能让您轻松进行管理。免费启用。https://www.elastic.co/cn/elasticsearch/

2.1 启动ES

        双击 bin/elasticsearch.bat

TIPS:
启动后ES会占用两个端口。
9200:ES对外提供服务的端口
9300:ES进行集群间通信与数据传输的端口

2.2 修改ES的配置文件

elasticsearch-8.8.2\config\elasticsearch.yml

2.3 添加编码配置

elasticsearch-8.8.2\config\jvm.options 

2.4 打开浏览器访问

http://localhost:9200

 3.ES的使用

常见操作
新增索引PUT http://localhost:9200/job
查询索引中数据GET http://localhost:9200/job
删除索引DELETE http://localhost:9200/job
查询所有索引数据GET localhost:9200/_all
查询索引的摘要信息GET http://localhost:9200/_cat/indices?v
获取所有映射GET http://localhost:9200/_mapping

3.1 启用/关闭索引

POST http://localhost:9200/job/_close
POST http://localhost:9200/job/_open

3.2 ES的数据类型

类型说明示例
text当一个字段是要被全文搜索的,比如文章内容、产品描
述等使用text类型。
设置text类型以后,字段内容会被分析,在生成倒排索
引以前,字符串会被分一个一个词项。
比如:java软件工程师,
会被分词为 java 、 软
件 、 工程师
keywordkeyword类型适用于索引结构化的字段,如果字段需要
进行过滤、排序、聚合。keyword类型的字段只能通过
精确值搜索到。
比如:城市,我们搜索北
京、深圳,这类词不应该
被拆分。
date通过format设置日期格式,常见的可以设置成年月日时分秒、年月日及毫秒值三种格式。
ignore_malformed。默认值false。如果为true,则忽略格式错误的数字。如果为false(默认值),则格式错误的数字将引发异常并拒绝整个文档。
null_value。默认是null。接受采用配置格式之一的日期值作为该字段,以替换任何显式的空值。默认为null,这意味着该字段被视为丢失。
byte,short,integer,long整型比如:职位ID、薪水。
float, half_float, scaled_float,double浮点型
integer_range, long_range, float_range,double_range,date_range范围型

4.SpringBoot整合ES

        Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷。包括非关系数据库、Map-Reduce 框架、云数据服务、关系数据库的访问支持等。

        Spring Data ElasticSearch 基于 Spring Data API 简化 ElasticSearch操作,将原始操作ElasticSearch的客户端API 进行封装 。与ElastichSearch交互简化数据访问层开发。

4.1 导入依赖

        注意使用的JDK版本应与ES版本的兼容问题

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

4.2 配置Elasticsearch连接信息

spring:elasticsearch:uris: http://localhost:9200

4.3 配置实体类

@Data
@Document(indexName = "esgoods") //indexName:索引的名称(必填项)
public class Goods {@Id  //主键的唯一标识private Integer id;//index:是否设置分词。searchAnalyze:搜索时使用的分词器。type: 数据类型@Field(index = true,type = FieldType.Text,searchAnalyzer = "ik_smart")private String name;private Integer stock;      // 库存@Field(type = FieldType.Text,searchAnalyzer = "ik_smart")private String description; // 描述
}
注解作用
@Document(indexName = "esgoods")用于指定该Java类映射到Elasticsearch中的索引名称。在这里,该类映射到名为"esgoods"的索引。
@Id用于标记文档的主键字段。在这里,id字段将被用作文档的主键。
@Field(index = true, type = FieldType.Text, searchAnalyzer = "ik_smart")用于配置类中的字段。在这里,name字段将被映射为Elasticsearch文档的一个字段,并且允许进行分词索引,使用的分词器是"ik_smart"。

4.4 编写Repository

        继承ElasticsearchRepository接口可以获得常用的数据操作方法

@Repository
public interface EsGoodsRepository extends ElasticsearchRepository<Goods,Integer> {Page<Goods> findByNameOrDescriptionOrderByIdDesc(String name, String description, Pageable pageable);
}

        ElasticsearchRepository接口是Spring Data Elasticsearch库提供的接口之一,它继承自Spring Data的CrudRepository接口,因此具备了常见的CRUD操作方法,如保存、查询、更新和删除等。

Spring Data Elasticsearch - Reference Documentationicon-default.png?t=N6B9https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.repositories

4.5 实现方法

4.5.1 将数据库中数据导入ES

@Overridepublic int importAll() {List<Goods> goods = goodsMapper.selectAll();Iterable<Goods> iterable = goodsRepository.saveAll(goods);Iterator<Goods> iterator = iterable.iterator();int count = 0;while (iterator.hasNext()) {iterator.next();count++;}return count;}

4.5.2 实现搜索方法

@Overridepublic Page<Goods> search(String keyword, Integer pageNum, Integer pageSize) {return goodsRepository.findByNameOrDescriptionOrderByIdDesc(keyword,keyword,PageRequest.of(pageNum,pageSize));}

相关文章:

28.JavaWeb-Elasticsearch

1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发&#xff0c;基于Apache协议的开源项目&#xff0c;具有实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速的特点。 1.1 全文检索引擎 分为通用搜索引擎&#xff08;百度、谷歌&…...

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…...

j2ee相关知识点

浏览器栏中&#xff0c;输入的是servlet的mapping映射&#xff0c;请求到servlet中去&#xff0c;jsp路径&#xff0c;会跳转到对应的页面 Servlet接口位于最顶端&#xff0c;GenericServlet实现了Servlet&#xff0c;HttpServlet继承了GenericServlet 浏览器中访问Servlet映…...

Shell脚本学习-eval内置命令

这个命令&#xff0c;平时接触不是很多&#xff0c;所以不知道是什么回事。 eval内置命令&#xff1a; 功能&#xff1a;当Shell程序执行到eval语句的时候&#xff0c;Shell读入参数args&#xff0c;并将它们组合成一个新的命令&#xff0c;然后执行。也就是重新运算求出参数的…...

word中将合并后的多行拆分为原先的行数

word中将已经合并的多行拆分为原先的行数&#xff0c;我们不用刻意去数应该是多少行&#xff0c; 只需将拆分的行数不断增加&#xff0c;word会默认最大增加到合并前的行数。...

网络知识点之-BGP协议

本文章收录至《网络》专栏&#xff0c;点击右上角专栏图标可访问本专栏&#xff01; 边界网关协议&#xff08;BGP&#xff09;是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议&#xff0c;也是唯一能够妥善处理好不相关路由域间的…...

【mac系统】mac系统调整妙控鼠标速度

当下环境&#xff1a; mac系统版本&#xff0c;其他系统应该也可以&#xff0c;大家可以自行试下&#xff1a; 鼠标 mac妙控鼠标&#xff0c;型号A1657 问题描述&#xff1a; 通过mac系统自带的鼠标速度调节按钮&#xff0c;调到最大后还是感觉移动速度哦过慢 问题解决&…...

AI > 语音识别开源项目列举

名称所属开发机构使用场景优缺点技术特点占有率描述CMU Sphinx卡内基梅隆大学嵌入式设备、服务器应用优点&#xff1a;可用于嵌入式设备和服务器应用。 缺点&#xff1a;准确率相对较低&#xff0c;适用范围有限。- 支持多种语言模型和工具。- 适用于嵌入式设备和服务器应用。中…...

golang单元测试及mock总结

文章目录 一、前言1、单测的定位2、vscode中生成单测 二、构造测试case的注意事项1、项目初始化2、构造空interface{}3、构造结构体的time.Time类型4、构造json格式的test case 三、运行单测文件1、整体运行单测文件2、运行单个单测文件报错&#xff08;1&#xff09;command-l…...

mysql中的‘\G’ ‘\g’ ‘;’ navicat dbeaver

省流&#xff1a; 在navicat、dbeaver等客户端中使用时&#xff0c;“\G”、“\g”、“;”都可以不需要。 “\G”、“\g”、“;”都是用来做sql的结束符用。“\g”、“;”作用完全等价。“\G”是将字段横排显示转换成纵列显示。 横排显示&#xff1a; id |e…...

驱动day4work

头文件 #ifndef __CKR_H__ #define __CKR_H__typedef struct {unsigned int MODER; // 00unsigned int OTYPER; // 04unsigned int OSPEEDR; // 08unsigned int PUPDR; // 0Cunsigned int IDR; // 10unsigned int ODR; // 14 } gpio_t;// GPIO口 #define PHY_GPI…...

[SQL挖掘机] - 字符串函数 - length

介绍: length函数是mysql中用于获取字符串长度的函数。它接受一个字符串作为参数&#xff0c;并返回该字符串的字符数量&#xff08;包括空格和特殊字符&#xff09;。 用法: 以下是length函数的语法&#xff1a; length(string)其中&#xff0c;string是要计算长度的字符串…...

「深度学习之优化算法」(十七)灰狼算法

1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…...

mysql主从复制(主-从-从)

文章目录 一、前期环境准备二、主库配置1.设置server-id值并开启binlog参数2.建立同步账户并给上权限3.查看主库状态4.锁表设置只读5.备份数据库数据 三、从库配置1.设置server-id值并开启binlog参数2.还原从主库备份数据3.设定从主库同步4.启动从库同步开关 四.测试1.在主库上…...

如何制定数据采集解决方案?

数据采集仍是人工智能&#xff08;AI&#xff09;构建团队的主要瓶颈。原因各不相同&#xff1a;用例数据可能不足&#xff0c;深度学习等新机器学习&#xff08;ML&#xff09;技术需要更多数据&#xff0c;或者团队并未建立获取所需数据的适当流程。但无论如何&#xff0c;对…...

RabbitMQ消息可靠性问题及解决

说明&#xff1a;在RabbitMQ消息传递过程中&#xff0c;有以下问题&#xff1a; 消息没发到交换机 消息没发到队列 MQ宕机&#xff0c;消息在队列中丢失 消息者接收到消息后&#xff0c;未能正常消费&#xff08;程序报错&#xff09;&#xff0c;此时消息已在队列中移除 …...

2023河南萌新联赛第(三)场:郑州大学(两个题目)

1.入门mex 重点 一些数字的mex是从0往上枚举&#xff0c;第一个没出现的数字。请你回答选最多k个数字&#xff0c;mex最大是多少 既然从0开始枚举&#xff0c;那么应该是最小&#xff0c;那么最大是什么&#xff1f; 经过自己的考虑&#xff0c;给出一个样例&#xff0c;0 1 1…...

学生管理系统-07打包与上线

一、项目架构 vue的项目必须要进行打包&#xff0c;并部署在nginx服务器上的 二、vue的打包 1、修改vue.cofing.js文件 在该文件中添加publicPath属性&#xff0c;值为./ const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDepen…...

day31贪心算法 用最少数量的箭引爆气球 和无重叠区间

题目描述 题目分析&#xff1a; x轴向上射箭&#xff0c;12一支&#xff0c;重叠的需要一支&#xff0c;3-8一支&#xff0c;7-16一支 返回2&#xff1b; 就是让重叠的气球尽量在一起&#xff0c;局部最优&#xff1b;用一支弓箭&#xff0c;全局最优就是最少弓箭&#xff1b…...

AMEYA360报道:手机直连卫星通信发展的三个阶段

卫星通信的发展从过去、现在与规划&#xff0c;可以分为三个阶段。手机卫星通信的第一个阶段中&#xff0c;较为典型的有铱星公司、海事卫星电话、天通卫星通信等&#xff0c;终端设备方面已经可以做到手持设备直接通过自带的天线与卫星进行通信。 包括铱星、天通卫星等&#x…...

FanControl:颠覆式开源风扇控制工具的全方位应用指南

FanControl&#xff1a;颠覆式开源风扇控制工具的全方位应用指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...

OpenClaw技能扩展实战:基于Qwen3-32B开发自定义文件处理器

OpenClaw技能扩展实战&#xff1a;基于Qwen3-32B开发自定义文件处理器 1. 为什么需要自定义文件处理器 上周处理季度数据时&#xff0c;我又遇到了那个老问题&#xff1a;手头有37个CSV文件需要清洗格式、去重合并&#xff0c;还要按日期归档。这种重复性工作既耗时又容易出错…...

LeetCodehot100-2 两数相加

class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {if (l1 nullptr) return l2;if (l2 nullptr) return l1;ListNode* head l1; // 保存头节点ListNode* prev nullptr; // 记录上一个节点&#xff0c;用于连接int carry 0;// 同时遍历…...

G-Helper高效解决ROG游戏本散热与性能平衡难题

G-Helper高效解决ROG游戏本散热与性能平衡难题 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: https://gitcode…...

从零开始:如何用开源方案打造你的第一台六足机器人

从零开始&#xff1a;如何用开源方案打造你的第一台六足机器人 【免费下载链接】hexapod 项目地址: https://gitcode.com/gh_mirrors/hexapod5/hexapod 想要亲手制作一台能够自如行走的六足机器人吗&#xff1f;hexapod开源项目为你提供了一套完整的免费解决方案&#…...

半导体仿真进阶:如何用Silvaco DOPING语句精确控制掺杂分布

半导体仿真进阶&#xff1a;如何用Silvaco DOPING语句精确控制掺杂分布 在半导体器件设计与工艺开发中&#xff0c;精确控制掺杂分布是决定器件性能的关键因素之一。Silvaco TCAD工具链中的DOPING语句&#xff0c;为工程师提供了从简单均匀掺杂到复杂梯度分布的灵活控制能力。…...

手把手教你用XCVU3P和FMC+接口搭建高性能PCIe载板(附原理图下载)

基于XCVU3P与FMC的高性能PCIe载板开发实战指南 在当今高速数据处理领域&#xff0c;FPGA因其并行计算能力和可重构特性成为关键器件。Xilinx UltraScale系列的XCVU3P芯片配合FMC扩展接口&#xff0c;为开发者提供了强大的硬件加速平台。本文将深入解析如何从零开始构建一个支持…...

别再死记硬背公式了!Cesium中Entity姿态(HPR)的获取与设置,一个例子讲透

Cesium中Entity姿态控制的本质&#xff1a;从HPR到四元数的思维跃迁 当你第一次在Cesium中加载一个3D模型&#xff0c;却发现它头朝下或者背对镜头时&#xff0c;那种挫败感我深有体会。传统教程往往直接扔给你一堆转换公式&#xff0c;却很少解释为什么需要这些看似复杂的数学…...

英飞凌AURIX TC3XX GPIO驱动配置与LED呼吸灯实现

1. 认识AURIX TC3XX的GPIO模块 第一次接触英飞凌AURIX TC3XX系列MCU时&#xff0c;我被它强大的GPIO功能惊艳到了。这不仅仅是一个简单的数字输入输出接口&#xff0c;而是集成了多种高级特性的硬件模块。在实际汽车电子项目中&#xff0c;比如氛围灯控制、状态指示灯等场景&a…...

从‘调不出来’到‘一次过流片’:折叠共源共栅放大器设计中那些没人告诉你的‘坑’与调试技巧

从‘调不出来’到‘一次过流片’&#xff1a;折叠共源共栅放大器设计中那些没人告诉你的‘坑’与调试技巧 在模拟电路设计的江湖里&#xff0c;折叠共源共栅&#xff08;Folded Cascode&#xff09;放大器就像一位身怀绝技却性格古怪的武林高手——性能强悍但极难驯服。许多工…...