SpringOJ竞赛计划----组件ElasticSearch

news/2025/11/11 15:11:24/文章来源:https://www.cnblogs.com/gccbuaa/p/19210415

由于我们用户在使用题库的时候,会用到使用关键词去搜索题目

我们需要根据用户给的关键词去进行搜索,我们如果沿用之前的mysql进行数据库查询,那样的话效率太慢了(系统管理员那里可以用,因为那里不太要求效率),那如果使用redis呢?

使用redis的话,如果使用redis原生逻辑来解决的话,很明显,redis并不具有(或者不好实现)这种搜索功能,如果使用后端处理reids返回的值,然后使用for循环进行筛选的话,这样效率也太低,所以我们引出组件-----ElasticSearch

Elasticsearch(ES)是一款基于 Lucene 的分布式搜索引擎,它在提升搜索效率方面表现卓越,这与其底层架构设计、数据处理机制及功能特性密切相关。

ElasticSearch
官⽹:https://www.elastic.co/cn/elasticsearch
官⽅学习⽂档:https://www.elastic.co/guide/en/elasticsearch/reference/8.5/getting
started.html

ES解决什么问题

全⽂检索(全部字段)、模糊查询(搜索)、数据分析(提供分析语法,例如聚合)

搜索原理

ES 的核心优势源于 Lucene 的倒排索引(Inverted Index) 结构,这是区别于传统数据库 “正向索引” 的关键设计:

  • 正向索引:以文档为单位存储内容(如数据库表),查询时需遍历所有文档,效率低下。
  • 倒排索引:将 “词项(Term)” 与 “文档 ID” 映射,例如:
    词项“云计算” → 关联文档ID:[101, 205, 312]
    词项“大数据” → 关联文档ID:[205, 431, 502]
  • 检索逻辑:查询时直接定位词项对应的文档集合,通过集合运算(交集、并集等)快速筛选目标文档,时间复杂度从 O (n) 降至 O (log n)。
  • 压缩优化:ES 使用 FST(Finite State Transducer)压缩索引,减少内存占用,提升词项查找速度。
⼀个表格将ES和mysql 相关的基本概念进⾏对⽐:

基本使⽤

拉取es镜像:
docker network create oj-network

创建网络

docker network create oj-network

创建目录:

启动es:
docker run -d --name oj-es-dev -e "ES_JAVA_OPTS=-Xms256m -Xmx256m" -e "discovery.type=single-node" -v D:\后端代码\springcloud\bite-oj\deploy\dev\elasticSearch\es-plugins:/usr/share/elasticsearch/plugins -e  "xpack.security.enabled=false" --privileged --network oj-network -p 9200:9200 -p 9300:9300 elasticsearch:8.5.3

这里按需求改成自己的
访问:http://localhost:9200/,验证启动成功

安装Kibana

Kibana是ElasticSearch的数据可视化和实时分析的⼯具。通过Kibana,⽤⼾可以搜索、查看和与存储 在Elasticsearch索引中的数据进⾏交互,执⾏⾼级数据分析,并通过各种图表、表格和地图将数据可视化。
拉取kibana镜像
docker pull kibana:8.5.3
启动kibana容器
docker run -d --name oj-kibana-dev -e "ELASTICSEARCH_HOSTS=http://oj-esdev:9200" -e "I18N_LOCALE=zh-CN" -p15601:5601 --net=oj-network kibana:8.5.3

这里面可能会有个-被吃,注意

修改配置/usr/share/kibana/config/kibana.yml,并启动kibana
1 # 2 # ** THIS IS AN AUTO-GENERATED FILE **
3 # 45 # Default Kibana configuration for docker target
6 server.host: "0.0.0.0"
7 server.shutdownTimeout: "5s"
8 elasticsearch.hosts: [ "http://oj-es-dev:9200" ]
9 monitoring.ui.container.elasticsearch.enabled: true
10 i18n.locale: "zh-CN"

进⼊开发者⼯具⻚⾯如下图,我们将在左侧编写相应的命令对es当中的数据进⾏操作,结果会呈现在右侧。

增加

查询

查询所有数据:
 GET /employee/_search
根据id查询
删除
删除某个数据
DELETE /employee/_doc/1

删除索引
DELETE /employee
修改

分词器

根据前⾯学习的倒排索引的概念。倒排索引是按照⽂档中的词汇(关键词)来组织的,索引的键
是⽂档集合中出现过的每个独特词汇或关键词。那es是怎么将这些关键词提取出来的呢?这其实就是es中的分词器在起着作⽤,它负责将⽂本切分成⼀个个有意义的词语,以建⽴索引或进⾏搜索和分析。
我们的业务中通常使⽤的是中⽂分词,es的中⽂分词默认会将中⽂词每个字看成⼀个词⽐
如:“我想吃⾁夹馍”会被分为”我”,”想”,”吃”,”⾁” ,”夹”,”馍” 这显然是不太符合⽤⼾的使⽤习惯,所以我们需要安装中⽂分词器ik,来讲中⽂内容分解成更加符合⽤⼾使⽤的关键字

ik分词器

步骤⼀:下载
其实我们应该下载和es版本相同的8.5.3版本的分词器,但是官⽅未提供8.5.3版本的,所以我们下载8.5.2版本的。
下载地址:https://github.com/infinilabs/analysis-ik/releases?page=3
步骤⼆:
下载完成后将其压随后放置在:es容器内/usr/share/elasticsearch/plugins⽬录下,也可以通过配置挂载⽬录的⽅式将插件放在挂载⽬录下。
步骤三:
修改分词器插件命名,将8.5.2改成8.5.3。
编辑插件配置⽂件:plugin-descriptor.properties⽂件修改版本号,修改成和es版本号⼀致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/962453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# Avalonia 17- ControlTemplates - VisualTreeDisplay

C# Avalonia 17- ControlTemplates - VisualTreeDisplayVisualTreeDisplay.axaml代码<Window xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"…

【软件测试】你需要的面试技巧全在这里,细节满满

小编总结了面试的细节,这份热乎乎、滚滚烫的面经分享给大家,希望对大家有所帮助。 面试形式 问题式 由招聘者按照事先拟订的提纲对求职者进行发问,请予回答。其目的在于观察求职者在特殊环境中的表现,考核其知识与…

Q:访问url地址,nginx报错 403 Forbidden

Q:访问url地址,nginx报错 403 ForbiddenPosted on 2025-11-11 15:08 三年三班王小朋 阅读(0) 评论(0) 收藏 举报403 Forbidden,说明 后端服务(ip:端口)拒绝了该请求,而不是 Nginx 的问题(因为这是直接访问…

非模式生物基因富集分析——小麦富集分析

TriticeaeGeneTribe - A homology database for Triticeae tribe (wheat, durum wheat, barley, and their relatives) 1、模式生物与非模式生物小麦属于作物模式生物2、富集分析 对于非常规生物的富集分析,有些R包没…

【MySQL】事务 - 详解

【MySQL】事务 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

2025年井式炉直销厂家权威推荐榜单:节能工业炉/退火井式炉/大型井式炉源头厂家精选

在工业热处理领域,井式炉因其独特的立式深井结构,在处理长轴类、棒材等细长工件时具有天然优势,能有效控制工件变形,保证性能稳定。随着制造业持续升级,节能高效、智能控温已成为井式炉发展的核心方向。为帮助您精…

2025年优质的数字化配电柜厂家推荐及选择参考

2025年优质的数字化配电柜厂家推荐及选择参考行业背景与市场趋势随着"双碳"目标的持续推进和新型电力系统建设的加速,数字化配电柜作为智能电网的关键设备,正迎来前所未有的发展机遇。根据中国电力企业联合…

基于AI辅助的Java程序设计贯穿式教学案例

基于AI辅助的Java程序设计贯穿式教学案例基于AI辅助的Java程序设计贯穿式教学案例 目录基于AI辅助的Java程序设计贯穿式教学案例教学目标思路案例相关git仓库实施方案一、初步导入:简单MIS系统二、面向对象深入学习三…

学习CANN总体架构

各层级术语 (部分可能不准确,仅供参考)昇腾计算语言 = AscendCL = Ascend Computing Language ≈ 各种开发算子开发 图开发 应用开发昇腾计算服务层 = Ascend Computing Service Layer昇腾算子库 = AOL = Ascend Op…

2025年防爆加热管优质厂家权威推荐榜单:防爆电加热棒/防爆电热管/防爆电加热管源头厂家精选。

在石油化工、矿山开采、危险品储存等特殊工业环境中,防爆加热管作为关键的热能设备,其安全性能直接关系到工业生产安全。据行业数据显示,2025年中国防爆电加热器市场规模预计达到78亿元,年均增长率保持在9.5%。为帮…

2025龙信杯

1. 分析手机镜像,请问机身的Wi-Fi信号源的物理地址是什么?[标准格式:01:02:03:04:05:06]结果为00:db:60:6e:86:13 2. 分析手机镜像,请问张大的手机号码尾号是3807的手机号码是多少?[标准格式:15599005009] 直接搜…

技术面:SpringCloud(SpringCloud有哪些组件,SpringCloud与Dubbo的区别)

SpringCloud有哪些组件?SpringCloud与Dubbo有什么区别?什么是SpringCloud Spring Cloud 是一个基于 Spring Framework 的开源微服务架构工具集,用于简化和快速构建分布式系统。它提供了一套完整的微服务解决方案,基…

2025年不锈钢四方管制造企业权威推荐榜单:无缝不锈钢方管/拉丝不锈钢方管/不锈钢抛光方管源头厂家精选

在当今工业与建筑领域,不锈钢四方管因其优异的耐腐蚀性、高强度和美观性,已成为众多工程项目不可或缺的核心材料。市场数据显示,不锈钢方管的需求近年来持续增长,广泛应用于建筑装饰、市政工程、机械制造、石油化工…

Consul(服务全生命周期治) 单节点部署测试以及脚本制作示例(v1.21.2)

Consul(服务全生命周期治) 单节点部署测试以及脚本制作示例(v1.21.2)本文介绍了 HashiCorp 开发的开源工具 Consul,其定位为服务网格与服务治理工具,核心解决分布式系统中服务发现、配置同步、流量安全管控问题。文…

详细介绍:【NestJS】NestJS三件套:校验、转换与文档生成,对比Django DRF

详细介绍:【NestJS】NestJS三件套:校验、转换与文档生成,对比Django DRFpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family…