您的位置 首页 java

实现一个搜索引擎,你也可以

“百度一下,你就知道”。这句耳熟能详的话语背后,说的就是搜索引擎。搜索引擎,并不是一个特别新的概念,早在1990年,万维网还没有出现的时候,就由美国一个大学几个普通的学习做出来一个能索引搜索文件的系统。而在今年,谷歌搜索、百度搜索也是世界上使用频率最高的搜索系统,除此之外,还有非常多的搜索引擎,尽管搜索引擎各式各样,但是他们的原理跟步骤都是差不多的,今天我们来简单地介绍介绍,一个搜索引擎大致的架构与工作的流程。

实现一个搜索引擎,你也可以

首先是 元数据 收集 ,没有数据,搜索什么?这个收集的方式有很多种,如果我们是搜索互联网上面的网页,那么我们可能需要一些爬虫软件去爬取数据,爬取到数据之后呢,我们要对关键信息进行提取,大部分网页上面都是HTML的结构,我们只需要正文的内容就行了,向一些导航栏呀,侧边栏呀,能够提取的有效价值并不高。如果我们只是建一个自己文章的搜索引擎,那就更加简单了,可以直接使用所有文章的文件内容,无需去实现爬虫。

实现一个搜索引擎,你也可以

接下来是索引, 因为整个文章可能非常的长,我们不可能每次搜索都进行全文的对比,所以我们常常对文章进行分词,建立对应的关键字索引。网上已经有很多开源的工具分词工具可以使用,例如Java语言的word,有兴趣的话大家可以了解下。这里有一个简单的细节优化,有一些词是不用建立索引的,例如你,我,他,是之类的词语,太普遍了,价值并不是很高,反而是一些专有名词,如 算法 、数据结构、架构师这类的词语价值更高。这里我们可以简单存储为下面的格式。

实现一个搜索引擎,你也可以

我们简单地使用3张表进行存储,地址表、单词列表、还有单词与地址的关系表。每次有一个查询,我们就先找单词表,然后再找到单词与连接表中所有的关系,然后返回对应的地址列表即可。

接下来我们会有一个问题,我们搜索到很多很多的东西,如何展示给用户呢?例如某个关键词,可能搜索出10万个不同的网页,到底用户需要哪一个呢?这个时候就需要进行 搜索排名 了。常见的搜索排名有哪些呢?例如:

1.关键字的出现频率,出现的越多次,得分越高。

2.关键字出现的时机,越早出现得分越高,出现的越均匀,等分越高

3.内容的创建时间,这个比较适合新闻类的搜索。

当然还有很多种,例如有些搜搜引擎公司谁给的钱多,谁就排在前面。

基本上,用了实现了这三步,一个简单的搜索引擎就完成了。但这远远不够,在今天这个时代,我们肯定希望搜索引擎越来越聪明!用AI武装到牙齿!今天,我们也经常用 神经网络算法 来优化我们的搜索引擎,我们可以把用户的搜索的关键字作为神经网络的输入,把用户最终的点击结果作为神经网络的输出,这样子反复训练,我们的搜搜系统就会越来越智能!

当然,现实中,搜索引擎是比这个复杂地多了,毕竟有海量的查询跟存储都需要优化,索引、排名的算法各家也有各家的特色,后面我们可以讲一讲一些常见的内容。说点题外话,相信你读到这里,你会对现网百度的困境也多了一些理解,为什么进入移动互联网时代后百度越来越困难,主要表现在第1跟第4点,首先是百度能获取到的数据越来越少了,其次是用户使用百度的频率也降低,恶性循环,百度也越来越难以掌握用户的动机了。

好了今天我的介绍就到这里了,后面我们会用具体的代码来简单实现一下,如果你有兴趣,那就 关注 我吧。

文章来源:智云一二三科技

文章标题:实现一个搜索引擎,你也可以

文章地址:https://www.zhihuclub.com/201416.shtml

关于作者: 智云科技

热门文章

网站地图