搜索引擎项目(四)
SearchEngine · 王宇璇/submit - 码云 - 开源中国 (gitee.com)
基于Servlet完成前后端交互
@WebServlet("/searcher")
public class DocSearcherServlet extends HttpServlet {private static DocSearcher docSearcher = new DocSearcher();private ObjectMapper objectMapper = new ObjectMapper();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.先解析请求,拿到用户提交的查询词String query = request.getParameter("query");if(query==null||query.equals("")){String msg = "非法输入,没有获取query的值。";System.out.println(msg);response.sendError(404 , msg);return;}//2.打印记录query的值System.out.println("query:"+query);//3.调用搜索模块进行搜索List<Result> results = docSearcher.search(query);//4.把当前的搜索结果进行打包response.setContentType("application/json; charset=utf-8");objectMapper.writeValue(response.getWriter(), results);}
}
总体思路就是接收前端用户输入的query传入后端,将后端的搜索结果返回给前端展示,不要忘记引用Servlet依赖。
前端代码
先创建一个web文件夹因为我们之后是要部署到服务器上的。

创建一个js文件夹保存js文件可以简化我们前端代码的构建。
前端代码就是对数据的接收以及页面设置。这里挑一些重要的属性介绍给大家。
html,body{height: 100%;background-image: url(preview.jpg);background-repeat: no-repeat;background-position: center;background-size: cover;}
这个jpg文件就是浏览器的背景图,大家可以根据自己的喜好进行修改。
因为图片和前端页面在同一路径下(直接将图片粘贴到WebApp下),所以直接用相对路径表示。
Smart TomCat配置与使用(本地测试)
1.首先先在官网下载tomcat。
2.打开idea,找到插件商城搜索SmartTomcat下载。
3.右上角最近配置,点击编辑当前配置。

4.点击右上角+号,添加SmartTomcat配置
配置内容,名称随便填
TomcatServer从文件中查找,打开刚才下载好的Tomcat的文件路径即可。
有一点值得注意的是Deployment Directory最终子目录一定是webapp。
完成之后启动tomcat就可以本地访问此网站了。http://localhost:8080/SearchEngine/
如果没有问题的话就可以向服务器上部署了。
部署到云服务器:
更改代码引用路径:
我们可以用FileZilla Client来传输本地与云服务器的文件。
将DocSearcher中的停用词文档传输到云服务器上,包括正排索引和倒排索引的两个文件
此时将STOP_WORD_PATH和INDEX_PATH改为云服务器上的路径即可。


打包
首先在pom.xml文件进行配置 ,主要就是配置打war包并且包的名称
<packaging>war</packaging><build><finalName>SearchEngine</finalName></build>
此时进行打包,云服务器大家可以选择腾讯或者阿里云,终端选择Xshell 7
连接云服务器,在云服务器中下载jdk以及tomcat,jdk的版本一定要与代码运行时jdk版本一致
这里说我遇到的一个bug:
我电脑上jdk版本是22,但是云服务器上是17
在我们的代码中有一处地方是去掉重复的文件,
while (!queue.isEmpty()){Pos minPos = queue.poll();Weight curWeight = source.get(minPos.row).get(minPos.col);//2.4看看取到的Weight中的DocId和上一个是否相同//相同就合并if(!target.isEmpty()){Weight lastWeight = target.get(target.size() - 1);if(lastWeight.getDocId() == curWeight.getDocId()){//合并WeightlastWeight.setWeight(lastWeight.getWeight() + curWeight.getWeight());}else{target.add(curWeight);}
target.get(target.size() - 1);这个方法之前是getLast()也就是jdk22对取数组最后一个元素的方法进行了封装,但是jdk17没有这个方法,就导致了bug的出现。
此时我们打开项目的文件所在位置,其目录下有一个target文件,我们打的war包就在此目录下,我们将此文件传输到云服务器的Tomcat,Webapps目录下,就会自动解压。此时在浏览器上访问云服务器http://47.94.142.181:8080/SearchEngine/就可以访问到我们的项目了。
相关文章:
搜索引擎项目(四)
SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com) 基于Servlet完成前后端交互 WebServlet("/searcher") public class DocSearcherServlet extends HttpServlet {private static DocSearcher docSearcher new DocSearcher();private ObjectMapper obje…...
声音克隆一键本地化部署 GPT-SoVITS
文章目录 GPT-SoVITS 介绍1:GPT-SoVITS安装2:GPT-SoVITS使用2.1 人声伴奏分离,去混响去延时工具2.2 语音切分工具2.3 语音降噪工具2.4 中文批量离线ASR工具2.5 语音文本校对标注工具GPT-SoVITS 介绍 GPT-SoVITS: 是一个由RVC变声器创始人“花儿不哭”推出的免费开源项目。…...
使用【Easypoi】实现百万数据导出
本文使用easypoi实现百万级数据导出 文章目录 前言一、一般情况下导出二、解决思路三、实现步骤导入依赖重写方法调用实现 结束 前言 下文实现了通过easypoi实现将百万级数据导出 一、一般情况下导出 一般导出流程(简单导出): 创建对应的…...
GRL-图强化学习
GRL代码解析 一、agent.py二、drl.py三、env.py四、policy.py五、utils.py 一、agent.py 这个Python文件agent.py实现了一个强化学习(Reinforcement Learning, RL)的智能体,用于在图环境(graph environment)中进行学习…...
昇思25天学习打卡营第22天|Pix2Pix实现图像转换
Pix2Pix图像转换学习总结 概述 Pix2Pix是一种基于条件生成对抗网络(cGAN)的深度学习模型,旨在实现不同图像风格之间的转换,如从语义标签到真实图像、灰度图到彩色图、航拍图到地图等。这一模型由Phillip Isola等人在2017年提出&…...
全感知、全覆盖、全智能的智慧快消开源了。
智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。AI安全管理平台&…...
ABC364:D - K-th Nearest(二分)
题目 在一条数线上有 NQNQ 个点 A1,…,AN,B1,…,BQA1,…,AN,B1,…,BQ ,其中点 AiAi 的坐标为 aiai ,点 BjBj 的坐标为 bjbj 。 就每个点 j1,2,…,Qj1,2,…,Q 回答下面的问题: 设 XX 是 A1,A2,…,ANA1,A2,…,AN 中最…...
hive中分区与分桶的区别
过去,在学习hive的过程中学习过分桶与分区。但是,却未曾将分区与分桶做详细比较。今天,回顾skew join时涉及到了分桶这一概念,一时间无法区分出分区与分桶的区别。查阅资料,特地记录下来。 一、Hive分区 1.分区一般是…...
Blender材质-PBR与纹理材质
1.PBR PBR:Physically Based Rendering 基于物理的渲染 BRDF:Bidirection Reflectance Distribution Function 双向散射分散函数 材质着色操作如下图: 2.纹理材质 左上角:编辑器类型中选择,着色器编辑器 新建着色器 -> 新建纹理 -> 新…...
微软的Edge浏览器如何设置兼容模式
微软的Edge浏览器如何设置兼容模式? Microsoft Edge 在浏览部分网站的时候,会被标记为不兼容,会有此网站需要Internet Explorer的提示,虽然可以手动点击在 Microsoft Edge 中继续浏览,但是操作起来相对复杂,…...
SpringBoot开启多端口探究(1)
文章目录 前情提要发散探索从management.port开始确定否需要开启额外端口额外端口是如何开启的ManagementContextFactory的故事从哪儿来创建过程 management 相关API如何被注册 小结 前情提要 最近遇到一个需求,在单个服务进程上开启多网络端口,将API的…...
优化算法:2.粒子群算法(PSO)及Python实现
一、定义 粒子群算法(Particle Swarm Optimization,PSO)是一种模拟鸟群觅食行为的优化算法。想象一群鸟在寻找食物,每只鸟都在尝试找到食物最多的位置。它们通过互相交流信息,逐渐向食物最多的地方聚集。PSO就是基于这…...
ThreadLocal面试三道题
针对ThreadLocal的面试题,我将按照由简单到困难的顺序给出三道题目,并附上参考答案的概要。 1. 简单题:请简述ThreadLocal是什么,以及它的主要作用。 参考答案: ThreadLocal是Java中的一个类,用于提供线…...
Git操作指令(已完结)
Git操作指令 一、安装git 1、设置配置信息: # global全局配置 git config --global user.name "Your username" git config --global user.email "Your email"# 显示颜色 git config --global color.ui true# 配置别名,各种指令都…...
大数据采集工具——Flume简介安装配置使用教程
Flume简介&安装配置&使用教程 1、Flume简介 一:概要 Flume 是一个可配置、可靠、高可用的大数据采集工具,主要用于将大量的数据从各种数据源(如日志文件、数据库、本地磁盘等)采集到数据存储系统(主要为Had…...
C语言 #具有展开功能的排雷游戏
文章目录 前言 一、整个排雷游戏的思维梳理 二、整体代码分布布局 三、游戏主体逻辑实现--test.c 四、整个游戏头文件的引用以及函数的声明-- game.h 五、游戏功能的具体实现 -- game.c 六、老六版本 总结 前言 路漫漫其修远兮,吾将上下而求索。 一、整个排…...
npm publish出错,‘proxy‘ config is set properly. See: ‘npm help config‘
问题:使用 npm publish发布项目依赖失败,报错 proxy config is set properly. See: npm help config 1、先查找一下自己的代理 npm config get proxy npm config get https-proxy npm config get registry2、然后将代理和缓存置空 方式一: …...
Springboot 多数据源事务
起因 在一个service方法上使用的事务,其中有方法是调用的多数据源orderDB 但是多数据源没有生效,而是使用的primaryDB 原因 spring 事务实现的方式 以 Transactional 注解为例 (也可以看 TransactionTemplate, 这个流程更简单一点)。 入口:ProxyTransa…...
Python每日学习
我是从c转来学习Python的,总感觉和c相比Python的实操简单,但是由于写c的代码多了,感觉Python的语法好奇怪 就比如说c的开头要有库(就是类似于#include <bits/stdc.h>)而且它每一项的代码结束之后要有一个表示结…...
数据库 执行sql添加删除字段
添加字段: ALTER TABLE 表明 ADD COLUMN 字段名 类型 DEFAULT NULL COMMENT 注释 AFTER 哪个字段后面; 效果: 删除字段: ALTER TABLE 表明 DROP COLUMN 字段;...
Deep SORT:如何用深度关联度量实现95%+准确率的实时多目标追踪?
Deep SORT:如何用深度关联度量实现95%准确率的实时多目标追踪? 【免费下载链接】deep_sort Simple Online Realtime Tracking with a Deep Association Metric 项目地址: https://gitcode.com/gh_mirrors/de/deep_sort 在计算机视觉领域ÿ…...
终极Windows安卓应用安装指南:告别模拟器,拥抱轻量级体验
终极Windows安卓应用安装指南:告别模拟器,拥抱轻量级体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了笨重的安卓模拟器&#x…...
AI编程助手配置统一管理:code-agnostic实现多编辑器配置同步
1. 项目概述:告别配置碎片化,一个中心管理所有AI编辑器如果你和我一样,同时在使用Cursor、OpenCode、Codex甚至Claude Code这些AI编程助手,那你一定对配置管理的混乱深有体会。每个编辑器都有一套自己的配置格式和存放位置&#x…...
2026 年全球网络安全威胁态势与关键技术防御研究
摘要 本文基于 Security Affairs 2026 年第 576 期安全通讯披露的最新网络攻击事件与漏洞情报,系统分析 Linux 无文件远控、内核提权、AI 供应链投毒、钓鱼攻击工业化、关键信息基础设施入侵等新型威胁的技术机理、传播路径与危害特征。研究结合 Quasar Linux RAT、…...
青年教师评副高‘捷径’:这6本被低估的SSCI,认可度不输顶刊!
01 Academic Medicine期刊分区影响因子自引率年文章数教育学1区5.211.5%252篇投稿参考:美国医学院协会(AAMC)官方期刊,审稿周期 2–3 个月,录用率≈20%;可选非 OA 模式免版面费,适合具有实践转…...
FPGA生成SPWM的另一种思路:抛弃ROM,用DDS IP核与CORDIC算法实时生成正弦波
FPGA实时生成SPWM:基于DDS IP核与CORDIC算法的高效实现方案 在电力电子和电机控制领域,SPWM(正弦脉宽调制)技术因其优异的谐波特性和高效率而广受青睐。传统FPGA实现方案通常采用预存波形数据的ROM方法,虽然实现简单&a…...
Anaconda 安装与配置 的所有核心步骤
下载:去官网或靠谱的镜像源(如清华镜像)下载 2025.06版 Windows x64 安装包(约950MB)。安装:运行 .exe 文件。关键选项1:勾选 Add Anaconda to my PATH (添加到环境变量)…...
别再只懂PCA了!用Python手写LDA,从鸢尾花分类实战看监督降维的威力
别再只懂PCA了!用Python手写LDA,从鸢尾花分类实战看监督降维的威力 鸢尾花数据集在机器学习领域就像"Hello World"之于编程——经典、简洁却蕴含丰富可能性。当大多数人用PCA处理这类数据时,我们往往忽略了数据本身携带的宝贵标签信…...
规格驱动营销:用AI代理与工程化思维打造Twitter增长自动化
1. 项目概述:一个为AI SaaS产品设计的Twitter营销自动化工具包如果你正在开发一款AI SaaS产品,并且已经为产品上线后的Twitter营销感到焦虑——不知道如何规划内容、如何与用户互动、如何将推文流量转化为实际用户——那么你很可能需要一套系统化的方法&…...
手把手教你:没有ST-LINK,如何用USB给STM32烧录程序(DFU模式保姆级教程)
零成本玩转STM32:USB-DFU模式烧录全攻略 当你深夜调试STM32项目时,突然发现手边没有ST-LINK,而快递至少要等三天——这种场景我经历过太多次。直到发现DFU模式这个隐藏技能,所有问题迎刃而解。本文将分享如何仅用一根USB线完成固件…...
