lucene 之 全文检索概述

我们日常生活中的数据可以分成两种,一种是结构化数据,还有一种是非结构化数据。

结构化数据就是固定格式和有限长度的数据,比如数据库和元数据等等。

非结构化就是无固定格式和不定长的数据,比如邮件和word文档。

还有介于两者之间的,半结构化数据,比如XML,html等,看具体需求可以有不同的处理方法。

非结构化数据还可以叫做全文数据。搜索引擎一般是针对这种数据来索引。

一种最直观的方法可以顺序扫瞄,速度非常慢。还有一种方法,我们把非结构数据中的一些信息抽取出来,然后变成结构化的,从而达到搜索相对较快的目的。重新抽取出来的信息我们称之为索引。举个例子,字典的拼音表就相当于索引,对于每个字的解释是非结构化的,如果字典没有拼音表,只能顺序扫描,然而字的某些信息是可以提取出来进行结构化处理的,比如读音就比较结构化,分声母和韵母,分别几种可以一一举例,于是将读音拿出来按照一定的顺序排列,每一项读音指向此字的详细解释的页数。

从字符串到文件的索引被成为反向索引。每个字符串指向包含此字符串的文档链表,这种文档链表成为倒排表。有了索引,保存的信息和要搜索的信息一致,可以大大加快搜索的速度。

创建索引的过程如下所示:

1.  准备原文档

2.  分词组建(Tokenizer)将文档分成一个个单独的词,去标点符号,去停用词

3.  继续传给语言处理组件,对于英语,将单词缩减成词根形式等等

4.  传给索引组建(indexer), 利用得到的词创建一个字典,对字典按照字母序排序,合并成文档倒排。

5.  根据相关性,对结果进行排序。

猜你喜欢

转载自sharp-fcc.iteye.com/blog/2011488