全文检索的基本原理(Lucene)

来源:互联网 发布:淘宝网运费险 编辑:程序博客网 时间:2024/06/05 10:14
   Lucene是一个高效的,基于Java的全文检索库。 所以在了解Lucene 之前要费一番工夫了解一下全文检索。
   那么什么叫做全文检索呢?这要从我们生活中的数据说起。 我们生活中的数据总体分为两种:结构化数据和非结构化数据。
   结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
   非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。
当然有的地方还会提到第三种,半结构化数据,如XML,HTML 等,当根据需要可按结构化 数据来处理,也可抽取出纯文本按非结构化数据来处理。
   非结构化数据又一种叫法叫全文数据。
   按照数据的分类,搜索也分为两种:
   对结构化数据的搜索:如对数据库的搜索,用 SQL语句。再如对元数据的搜索,如利用 windows 搜索对文件名,类型,修改时间进行搜索等。
   对非结构化数据的搜索:如利用 windows 的搜索也可以搜索文件内容,Linux 下的 grep 命令,再如用Google 和百度可以搜索大量内容数据。
   对非结构化数据也即对全文数据的搜索主要有两种方法:
一种是顺序扫描法(Serial Scanning):所谓顺序扫描,比如要找内容包含某一个字符串的文 件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串, 则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows 的搜索也可以搜索文件内容,只是相当的慢。如果你有一个80G 硬盘,如果想在上面找到 一个内容包含某字符串的文件,不花他几个小时,怕是做不到。Linux 下的grep 命令也是这 一种方式。大家可能觉得这种方法比较原始,但对于小数据量的文件,这种方法还是最直接, 最方便的。但是对于大量的文件,这种方法就很慢了。
   有人可能会说,对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快(由于结构 化数据有一定的结构可以采取一定的搜索算法加快速度),那么把我们的非结构化数据想办 法弄得有一定结构不就行了吗?
   这种想法很天然,却构成了全文检索的基本思路,也即将非结构化数据中的一部分信息提取 出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜 索相对较快的目的。
   这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
   这种说法比较抽象,举几个例子就很容易明白,比如字典,字典的拼音表和部首检字表就相 当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和部首检字表,在 茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如 读音,就比较结构化,分声母和韵母,分别只有几种可以一一列举,于是将读音拿出来按一 定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到 读音,然后按其指向的页数,便可找到我们的非结构化数据——也即对字的解释。

   这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。

转自:http://www.yanhom.cn/yanhomBlog/article/4/detail

0 0
原创粉丝点击