在一些大型的门户网站和电商网站中,都有自己的站内搜索,但是使用传统的数据库查询方式已经无法满足一些高级的搜索要求,比如说:搜索速度要快、搜索结果要按照相关度排序,搜索的内容格式不固定,这些都需要使用全文实现搜索功能。
什么是全文搜索?
- 信息检索
我们先要知道信息检索:从信息集合中找出与用户需求相关的信息,检索的信息包括:文本,图像,音频,视频等信息。而全文检索是信息检索其中的一类。
全文检索:是计算机索引程序扫描文章中的每一个词,对每一个词都建立索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的检索进行查找,并将查找结果返回给用户。
数据检索:例如,数据均按”时间、人物、地点、事件”的形式存储,查询可以为地点=“北京”,数据检索的性能取决于所使用的标识字段的方法和用户对这种方法的理解,有很大的局限性。
- 全文检索
举个栗子:当我们去图书馆借书的时候,肯定不会说是去一本一本你的去翻看然后找自己感兴趣的书籍,我的天哪,这得找到猴年马月。
所以我们进图书馆的时候一般都会先去查阅数据的索引卡,或者索引标志,找到相应的书籍;所以当一本书进入图书馆之后,最重要的就是建立索引卡,同样,对于我们所拥有的信息,也需要建立索引。
建立索引,就是对待搜索的信息进行一定的分析,并将分析结果按照一定的组织方式存储起来,通常将这些结果存储在文件中。存储分析结果的文件的集合就是索引。在查询时,先从索引中查找,由于索引是有一定的结构组织的,所以查询的速度非常快。
上图就是建立索引的过程,先对信息进行采集(如果信息检索系统在用户发出检索请求后再去互联网上找答案,根本无法再有限的时间返回结果),然后对信息进行加工,建立索引。在Internet上采集信息的软件被称为爬虫或者蜘蛛或者网络机器人。爬虫在Internet上访问每一个网页,没访问一个网页就把其中的内容传回本地服务器。爬虫的原理可以去看看这篇文章网络爬虫基本原理(一)
倒排索引结构
一开始有点蒙,倒排序怎么个倒排序,那正排序又是什么?后来在网上找到一篇文章,正排索引和倒排索引。
正排索引
主要的意思就是说,当网络爬虫在Internet上收集信息的时候,会把收集到的网页进行处理,就是把对网页的内容进行分词(关键词),可以看成这样:
网页 | 关键词 |
---|---|
网页A= | 关键词1+关键词2+关键词3+关键词4+关键词5+关键词6+关键词7+……. |
网页B= | 关键词1+关键词2+关键词3+关键词4+关键词5+关键词6+关键词7+……. |
网页C= | 关键词1+关键词2+关键词3+关键词4+关键词5+关键词6+关键词7+……. |
具体怎么分词大家可以去了解了解分词器,中文的分词和英文的分词是不一样的。原理如下:
正如上面的这个过程,把一个网页分成一个个的关键词的过程就是一个正排索引的过程。
倒排索引
用户查信息的时候,一般都是通过关键词来查询相应的信息。
倒排索引是这样的,倒排索引这个关键词之后跟了一堆网页。
关键词 | 网页 |
---|---|
关键词1= | 网页A+网页B+网页C+网页O+……. |
关键词2= | 网页B+网页P+网页Z+……. |
关键词3= | 网页D+网页T+网页Y+网页Z+….. |
而solr就是一个基于Lucene的Java全文搜索引擎服务器。