数据分类

我们生活中的数据总体分为两种:结构化数据和非结构化数据。
数据及全文检索 - 图1

数据库搜索

数据库中的搜索很容易实现,通常都是使用sql语句进行查询,而且能很快的得到查询结果。为什么数据库搜索很容易呢?因为数据库中的数据存储是有规律的,有行有列而且数据格式、数据长度都是固定的。

非结构化数据查询方法

非结构化数据查询方法有两种,一种是顺序扫描法(Serial Scanning),另外一种是全文检索(Full-text Search)。下面分别对它们进行介绍。

顺序扫描法(Serial Scanning)

所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件,如利用windows的搜索也可以搜索文件内容,只是相当的慢

全文检索(Full-text Search)

将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引
例如:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,它就比较结构化,分声母和韵母,分别只有几种可以一一列举,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到我们的非结构化数据(也即对字的解释)。
这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。虽然创建索引的过程是非常耗时的(你想啊,字典制作出来那可是相当费时的),但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。

如何实现全文检索呢?

上面已经介绍了全文检索是啥,那如何实现全文检索呢?我们可以使用Lucene来实现全文检索。Lucene是apache下的一个开放源代码的全文检索引擎工具包(它提供了许多的jar包,即实现全文检索的类库)。它提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便地在目标系统中实现全文检索的功能。
注意:Lucene只是一个引擎,只是一个工具包,如果使用Lucene实现全文检索的功能,那么要记住Lucene是不能单独运行的

全文检索技术的应用场景

对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,所以全文检索技术的应用场景有:
数据及全文检索 - 图2