全文检索学习笔记

  • 什么是全文检索

1.1 数据分类

我们生活中的数据总体分为两种:结构化数据和非结构化数据。

* 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。

* 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。

 

当然有的地方还会提到第三种,半结构化数据,如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。

1.2 数据搜索方式

对结构化数据的搜索 :如对数据库的搜索,用SQL语句。再如对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进行搜索等。

 

对非结构化数据也即对全文数据的搜索主要有两种方法:

 

一种是顺序扫描法 (Serial Scanning): 所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。如果你有一个80G硬盘,如果想在上面找到一个内容包含某字符串的文件,不花他几个小时,怕是做不到。Linux下的grep命令也是这一种方式。大家可能觉得这种方法比较原始,但对于小数据量的文件,这种方法还是最直接,最方便的。但是对于大量的文件,这种方法就很慢了。

 

有人可能会说,对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快(由于结构化数据有一定的结构可以采取一定的搜索算法加快速度),那么把我们的非结构化数据想办法弄得有一定结构不就行了吗?

 

这种想法很天然,却构成了全文检索的基本思路,也即将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。

 

这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引 。

这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search) 。主要应用领域:搜索引擎(百度,搜狗)、站内搜索(微博搜索)、电商网站(京东,淘宝)

 

  • 全文检索原理

全文检索学习笔记

全文检索大体分两个过程,索引创建(Indexing)和搜索索引(Search)。

 

* 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。

* 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。

 

于是全文检索就存在三个重要问题:

索引里面究竟存些什么?(Index)

如何创建索引?(Indexing)

如何对索引进行搜索?(Search)