用Java写了一个搜索引擎系统

作者:微信小助手

发布时间:2022-04-19T10:29:09

来源:https://blog.csdn.net/m0_57315623?type=blog

前言

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

一.搜索引擎怎么搜索

搜索引擎就像一个小蜜蜂每天不停的采摘蜂蜜,就是去爬虫各个网页,然后通过爬取之后建立索引,以供于我们去搜索。

这里我们可以使用Python,或者下载文档压缩包。这里我们下包把,快多了。本来想搞一个英雄联盟的,实在找不见,要是后续有老铁找到可以分享一下。

建议大家别爬虫(要不然被告了,不过我们学校的官网倒是可以随便爬,我们当时就是拿这个练手的) 为什么要用索引呢?

因为爬的数据太多了,不索引,难道我去遍历吗?时间复杂度太大了。

这里我们需要建立索引,索引分别为正排索引,和倒排索引。

拿LOL举个例子吧,正排就相当于,我们提到无极剑圣的技能就可以联想到:

  • Q技能 阿尔法突袭
  • W技能 冥想
  • E技能 无双
  • R技能 高原血统

所以这是根据名字选技能

倒排索引就是LOL里面谁有剑:

  1. 蛮王
  2. 无极剑圣
  3. 剑姬

所以这是根据特点选择英雄

二.模块划分

1.索引模块

1)扫描下载到的文档,分析内容,构建出,正排索引和倒排索引。并且把索引内容保存到文件中。

2)加载制作i好的索引。并提供一些API实现查正排和查倒排这样的功能。

2.搜索模块

1)调用索引模块,实现一个搜索的完整过程。

输入:用户的查询词 输出:完整的搜索结果

3.web模块

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

三. 怎么实现分词

分词的原理:

1.基于词库

尝试把所有的词都进行穷举,把这些结果放到词典文件中。

2.基于统计

收集到很多的语料库,进行人工标注,知道了那些字在一起的概率比较大~

java中能够实现分词的第三方工具也是有很多的

比如ansj(听说唱的兄弟可能听过ansj,哈哈)这个就是一个maven中央仓库的分词第三方库。

我们直接下载最新版本然后放入pom.xml里面

test包里直接操作:我们使用这个测试代码直接搞。试一下这个包咋用。

import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;
import java.util.List;
public class TastAnsj {
    public static void main(String[] args) {
        String str = "易大师是一个有超高机动性的刺客、战士型英雄,擅长利用快速的打击迅速击溃对手,易大师一般打野和走单人路,作为无极剑道的最后传人,易可以迅速砍出大量伤害,同时还能利用技能躲避猛烈的攻击,避开敌人的集火。";
        List<Term> terms = ToAnalysis.parse(str).getTerms();
        for (Term term : terms) {
            System.out.println(term.getName());
        }
    }
}

四.文件读取

把刚刚下载好的文档的路径复制到String中并且用常量标记。

这一步是为了用遍历的方法把所有html文件搞出来,我们这里用了一个递归,如果是绝对路径,就填加到文件链表,如果不是就递归,继续添加里面的值。