在搜索文档内容之前要做的事情就是对从各种不同来源(网页,数据库,电子邮件等)的文档进行索引,索引的过程就是对内容进行提取,规范化(通过对内容进行建模来实现),然后存储。
在索引的过程中有几个基本的概念,根据我自己的理解大概写一下:
文档(Document):
文档在索引和搜索的时候都会用到,是索引和搜索的基本单位(类似于关系数据库关系表中的记录),若我们对网页内容进行索引和搜索,则从互联网上爬下来的每一个网页最终都会经过分析,提取出其中有意义的部分(比如网页标题,URL,包含的关键字,发布日期等),形成一个个的文档存储起来,在搜索的时候0根据这些内容进行匹配,找到的也是一个个匹配的文档,然后再从文档中找出需要的内容,进行还原
域(Field):
域是文档中真正用来匹配的东西,文档是由一个或者多个域构成的(可以类别关系表中的字段,一条记录由多个字段构成,每个字段都有其类型和对应的值,Lucene中文档是由域构成,每个域都有其名称、类型和值)。关于Lucene中的域选项可以参考之前我写的这篇文章:Lucene中的域选项
分析器(Analyzer)/词元(Term):
分析器同样是在索引和搜索的时候都需要用到,分析器是把原始文档(或者用户输入)解析成一个个的词语(称为词元),Lucene的索引就是一种倒排索引的结构,存储的是从词元到文档的映射。原始文档通过分析器转换成词元然后将词元和文档的映射关系存储为索引,用户搜索时分析器将用户的输入转换为词元然后到索引中去查找匹配的文档
Lucene的索引过程主要分为三个步骤:
1.将从各种方式得到的文档转换成文本
2.用分析器分析文本
3.将分析好的文本保存至索引
下边的一张图是我从网上找的,很好滴说明了Lucene的索引过程(还有搜索的过程)