相关文章
搜索引擎系统———引擎模块(ssm三剑客项目)
2024-11-10 18:10

=@TOC 咋们如果用我们的小服务器去搞百度,搜狗那种引擎肯定是不行的,内属于全站搜索,我们这里做一个站内搜索。这个还是可以的,就类似于我们对网站里的资源进行搜索。

搜索引擎系统———引擎模块(ssm三剑客项目)

搜索引擎就像一个小蜜蜂每天不停的采摘蜂蜜,就是去爬虫各个网页,然后通过爬取之后建立索引,以供于我们去搜索。 这里我们可以使用Python,或者下载文档压缩包。这里我们下包把,快多了。本来想搞一个英雄联盟的,实在找不见,要是后续有老铁找到可以分享一下。 建议大家别爬虫(要不然被告了,不过我们学校的官网倒是可以随便爬,我们当时就是拿这个练手的) 为什么要用索引? 因为爬的数据太多了,不索引,难道我去遍历吗?时间复杂度太大了。 这里我们需要建立索引,索引分别为正排索引,和倒排索引

拿LOL举个例子吧,正排就相当于,我们提到无极剑圣的技能就可以联想到 Q技能 阿尔法突袭 W技能 冥想 E技能 无双 R技能 高原血统 故根据名字选技能 在这里插入图片描述

倒排索引就是LOL里面谁有剑 1.蛮王 2.无极剑圣 3.剑姬 故根据特点选择英雄

1)扫描下载到的文档,分析内容,构建出,正排索引和倒排索引。并且把索引内容保存到文件中。 2)加载制作好的索引。并提供一些API实现查正排和查倒排这样的功能。

1)调用索引模块,实现一个搜索的完整过程。 输入:用户的查询词 输出:完整的搜索结果

需要实现一个简单的web程序,能够通过网页的形式和用户进行交互。 包含了前端和后端。

分词的原理 1.基于词库 尝试把所有的词都进行穷举,把这些结果放到词典文件中。 2.基于统计 收集到很多的语料库,进行人工标注,知道了那些字在一起的概率比较大~

java中能够实现分词的第三方工具也是有很多的 比如ansj(听说唱的兄弟可能听过ansj,哈哈)这个就是一个maven中央仓库的分词第三方库。 在这里插入图片描述 我们直接下载最新版本然后放入pom.xml里面 test包里直接操作:我们使用这个测试代码直接搞。试一下这个包咋用。 在这里插入图片描述

 

把刚刚下载好的文档的路径复制到String中并且用常量标记。 这一步是为了用遍历的方法把所有html文件搞出来,我们这里用了一个递归,如果是绝对路径,就填加到文件链表,如果不是就递归,继续添加里面的值。

 

在这里插入图片描述 我们尝试运行一下,这里的文件也太多了吧,而且无论是什么都打印出来了。所以我们下一步就是把这些文件进行筛选,选择有用的。

 

这个代码就是只是针对末尾为html的文件。下图就是展示结果。 在这里插入图片描述

这里分为三个分别是解析Title,解析Url,解析内容Content(因为搜索引擎是先会出来一个界面的

4.1.1解析Title

f.getName()是直接读取文件名字的方法。

我们用的name.substring(0,f.getName().length()-5);为什么要用总的文件名字长度减去5呢,因为.HTML刚好就是五。

 

4.1.2解析Url操作

这里的url就是我们平时去一个浏览器输入一个东西下面会有一个url,这个url就是我们的绝对路径经过截取获得出我们的相对的目录,然后与我们的http进行拼接,这样就可以直接得到一个页面。

 

4.1.3解析内容

以<>为开关进行对数据的读取,以int类型读取,为什么要用int而不是char呢因为int类型读完之后就变成-1可以判断一下是否读取完毕。 具体代码如下很容易理解。

 

这一模块总的代码块如下

 

通过这个类去构造出索引但是这个类,和数据库里面的结构是不一样的,但是目的都是为了加快查找的速度。 所以有两个类 正排和倒排的时间复杂度都是1,在把时间复杂度为一的放入倒排哩

1.给定一个docid,在正排索引中,查询文档的详细信息。使用数组来表示docId private ArrayList forwardIndex = new ArrayList<>(); 2.把刚刚处理过的数据添加到索引里面(title,URL,content; 将这三个打包成一个数组大的元素插入数组中。(数组下标刚好是doc id) 3.

1.使用哈希表来表示倒排索引key就是词,value就是一组和这个词相关的文章。 private HashMap<String,ArrayList> invertedIndex= new HashMap<>(); 2倒排索引是词和文档的映射,因为权重不一样,所以要对标题和正文分别分词,最后遍历分词结果,统计词的出现次数; 我们这里使用一个HashMap 的key表示Å分词结果,value是和分词结果相关的id列表。 在这里插入图片描述 通过就可以处理我们的文本的权重了

分别使用两个文件来分别保存我们的倒排索引和正排索引,然后把索引的文件路径放在我们,解析好的文件包的地址中。 第一步,先判断索引对应的目录是否存在,不存在就创建。

我们需要把索引加载到内存中,需要读取刚刚我们存进去的数据并解析成<ArrayList> Jackson专门提供了一个辅助的工具类TypeRerference<>; 我们直接写入以下操作即可把存进去的json数据解析成我们需要的 ArrayList和HashMap<Sting,ArrayList> forwardindex = objectmapper.readValue(farwardIndexFile,new TypeRerference<ArrayList> () {});

为了能够通过多线程制作索引,直接引入线程池。 由于索引并不是直接就执行完的,这里要等线程把任务执行完, 这里需要用到 countDownLatch 做一个裁判,记录下我们跑到哪里,直到跑完,但是为了防止有的任务过慢,我们加一个时间,等时间到了再保存索引。 注意这里还会遇到线程安全的问题,在多线程情况会出现多个线程执行处理索引的问题。 此时就需要用到加锁的操作,这里就可以分别的去把正排索引,和倒排索引去加锁。

为什么有时候我们运行完毕,该程序还不退出呢,这里需要用到守护线程,我们创建出来的线程并不是守护线程,因此当main执行完了,这些线程还在工作。有两种操作,要么都设置成守护线程,要吗使用shutdown)把线程池中的线程杀死即可。

1.针对与用户输入的查询词进行分词、 2.触发。拿着每个分词结果去倒排索引中查,找到相关性的文档 3.排序。针对上面触发出来的结果,进行排序 4.包装结果,根据排序后的结果去,查正排,获取到每个文档的详细信息,包装成一定结构的数据返回出去。 这四步仅仅是把之前准备好的工作串起来

提供一个web接口,前端使用三剑客,后端这里就用sprig boot就可以了。 这里就需要约定前后端的接口,明确描述,服务器能接受啥接口,能返回啥响应。 这里的接口我们只需要实现搜索接口,即可

响应http /1.1 200 ok [ { tiele :”标题“ url: “这是url1” desc:“这是描述1” } ]

    以上就是本篇文章【搜索引擎系统———引擎模块(ssm三剑客项目)】的全部内容了,欢迎阅览 ! 文章地址:http://sjzytwl.xhstdz.com/news/4685.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://sjzytwl.xhstdz.com/mobile/ , 查看更多   
最新文章
【原】十大公认性能最强的手机排行手机排行「【原】十大公认性能最强的手机排行」
在当今的手机市场中,各大品牌纷纷推出具有各种特色的手机,以满足不同用户的需求。在这篇文章中,我们将为大家介绍十大公认性能
10款冬天温暖实用礼物攻略:精致实用数码礼物,适合送男女朋友好物手机云台「10款冬天温暖实用礼物攻略:精致实用数码礼物,适合送男女朋友好物」
​​今天这篇攻略是各种数码礼物,有便宜一些的,也有一些稍微贵一些的,想要挑选一些比较适合送男女朋友的实用礼物的话,可以看
那双腿真好看,像一双筷子一样直。我手机「那双腿真好看,像一双筷子一样直。」
1. 这脚油门加的刚才和同事逛街,见一美女,身材好,腿修长,我忍不住夸:“那双腿真好看,像一双筷子一样直。”同事脱口而出:
近视眼挑手机屏幕,究竟是选LCD还是OLED?手机怎么选「近视眼挑手机屏幕,究竟是选LCD还是OLED?」
最近有很个朋友正打算换机,于是他问到了笔者这里,希望我能推荐几款合适的LCD屏幕。我自己倒是很意外,没想到朋友还是LCD情怀党
苹果14传输到新手机,竟然这么简单我手机「苹果14传输到新手机,竟然这么简单」
苹果的iPhone 14系列为用户带来了卓越的性能和丰富的功能。然而,当您升级到新手机时,如何将旧手机的数据传输到新手机成为一个
郑在玹//课上玩手机被发现啦上课玩手机「郑在玹//课上玩手机被发现啦」
数学课……“唉,好烦哦,果然数学课最无聊了”你嘟囔着,左望右看着,嗯……趴到了一大片阿,我也困,想睡觉……可惜辽,数学老
手机摄影技巧手机摄影「手机摄影技巧」
手机摄影技巧:  1.了解摄影的基本元素光(顺光、侧光、顶光、逆光、黄金时段)   光是摄影的生命。有了光,万物才有了可以被
已预定x200 pro mini,分享下我的换机原因我手机「已预定x200 pro mini,分享下我的换机原因」
线下有优惠所以在线下订了,只能订512的,已经跟导购说要1t的了,到时如果没有1t的就再等等。为什么选这个机子?先说说我的用机
为什么你的外卖“烧钱”推广还是没单量?手机搜狐网「为什么你的外卖“烧钱”推广还是没单量?」
美团的竞价推广产品很多,到底我该怎么选推广产品?烧钱的速度很快,可是烧不出来几单,投入产出比极低?高度依赖推广,推广一停
相关文章