如何在java环境下实践基于内容的搜索引擎架构比较简单
优采云 发布时间: 2021-07-21 06:38如何在java环境下实践基于内容的搜索引擎架构比较简单
相信很多人都知道搜索引擎。由于我在做校园新闻应用的时候爬下来了很多数据,觉得很适合加个搜索功能,于是看了《集体智慧编程》的相关章节,自己动手实践。一点点。编写新闻爬虫时使用的自然语言处理java库,也可以在解析用户输入的查询语句时使用,所以将书中的python代码改为java,编写了一个基于内容的搜索引擎(画外音:其实,你只是个移动的瓦工,别往脸上贴金子!)。在这里跟大家分享一下制作的过程和效果,希望对童鞋也有兴趣的小伙伴们多多指教哦!
什么是搜索引擎?这可能意味着数据库中记录了一堆项目和相应的属性。客户端与数据库交互。对于每次交互,机器通过一系列算法计算项目的分数。根据这些分数对物品进行排序,分数越高越符合用户的需求,然后将结果列表返回给客户端。
基于内容的搜索引擎根据用户输入的关键词和数据库项目的属性信息计算项目得分。我目前只实现了三种最原创的方式来计算一个item(也就是下面提到的文档)的得分:统计关键词的词频、文档中的位置、文档中的距离。除了这些信息之外,对搜索引擎的后续研究还可以引入许多其他属性,例如网络文档中内部链接的数量和质量。
本文主要讲解如何在java环境下实践基于内容的搜索引擎。结构比较简单,分为两步:
1、创建后台数据库
爬虫获取到的原创文件内容并不是我们想要的全部,需要提取有用的信息存储在数据库管理系统中,方便访问。基于内容的搜索引擎只需要保存文档资源位置(url)、文档中的单词、单词在文档中的位置。因此,可以制作数据库的ER图:
URLlist 和 WordLocation,WordList 和 WordLocation 都是一对多的关系。一个文档可以有多个词,一个词可以出现在多个文档中,也可以出现在文档的多个位置。
从原创文件中获取上述数据,并结合下面的包*敏*感*词*进行分析。
BO层实体和DC层数据交互的结构已经讲过了(Java需要使用反射机制来实现,有兴趣的小朋友可以点击查看)这次主要讲解BO层业务处理的一些方法核心 BOManager 类:
<p> //遍历读取原始文件,调用addToIndex建立索引
public void loadData2DB()
{
//原始文件所在文件夹在本地的位置
File file0 = new File(FilePathStaticString.originFilePath+"\\");
String[] inFile = file0.list();
for(int i=0;i