Lucene 全文检索的基本原理-如何创建索引

Lucene 全文检索的基本原理-如何创建索引




全文检索的索引创建过程一般有以下几步:
第一步::一些要索引的原文档 :: (Document)。
为了方便说明索引创建过程,这里特意用两个文件为例:
文件一:Students should be allowed to go out with their friends, but not allowed to drink beer. 
文件二:My friend Jerry went to school to see his students but found them drunk which is not allowed. 
  
第二步::将原文档传给分次组件  (Tokenizer)。
分词组件(Tokenizer)会做以下几件事情(此过程称为 Tokenize):
1.  将文档分成一个一个单独的单词。
2.  去除标点符号。
3.  去除停词(Stop word)。
所谓停词(Stop word)就是一种语言中最普通的一些单词,由于没有特别的意义,因而大多数情况下不能成为搜索的关键词,因而创建索引时,这种词会被去掉而减少索引的大小。15 英语中挺词(Stop word)如:“the”,“a”,“this”等。
对于每一种语言的分词组件(Tokenizer),都有一个停词(stop word)集合。经过分词(Tokenizer)后得到的结果称为词元(Token)。
在我们的例子中,便得到以下词元(Token):
“Students”,“allowed”,“go”,“their”,“friends”,“allowed”,“drink”,“beer”,“My”,“friend”,
“Jerry”,“went”,“school”,“see”,“his”,“students”,“found”,“them”,“drunk”,“allowed”。
  
第 三 步 : 将 得 到 的 词 元 (Token) 传给语言处理组件(Linguistic Processor)。
语言处理组件(linguistic processor)主要是对得到的词元(Token)做一些同语言相关的处理。
对于英语,语言处理组件(Linguistic Processor)一般做以下几点:
1.  变为小写(Lowercase)。
2.  将单词缩减为词根形式,如“cars”到“car”等。这种操作称为:stemming。
3.  将单词转变为词根形式,如“drove”到“drive”等。这种操作称为:lemmatization。
  
Stemming  和和和 lemmatization 的异同:

  • 相同之处:Stemming 和 lemmatization 都要使词汇成为词根形式。  
  • 两者的方式不同:  
    • Stemming 采用的是“缩减”的方式:“cars”到“car”,“driving”到“drive”。  
    • Lemmatization 采用的是“转变”的方式:“drove”到“drove”,“driving”到“drive”。  
  • 两者的算法不同:  
    • Stemming 主要是采取某种固定的算法来做这种缩减,如去除“s”,去除“ing”加“e”,
    • 将“ational”变为“ate”,将“tional”变为“tion”。   Lemmatization 主要是采用保存某种字典的方式做这种转变。比如字典中有“driving”到“drive”,“drove”到“drive”,“am, is, are”到“be”的映射,做转变时,只要查字典就可以了。  
  • Stemming 和 lemmatization 不是互斥关系,是有交集的,有的词利用这两种方式都能达16 到相同的转换。  
语言处理组件(linguistic processor)的结果称为词(Term)。
在我们的例子中,经过语言处理,得到的词(Term)如下:
“student”,“allow”,“go”,“their”,“friend”,“allow”,“drink”,“beer”,“my”,“friend”,“jerry”,
“go”,“school”,“see”,“his”,“student”,“find”,“them”,“drink”,“allow”。
  
也正是因为有语言处理的步骤,才能使搜索 drove,而 drive 也能被搜索出来


第四步:将得到的词传 (Term) 给索引组件 (Indexer)。。

索引组件(Indexer)主要做以下几件事情:
1. 利用得到的词 (Term)创建一个字典。。。。
在我们的例子中字典如下:

2.  对字典按字母顺序进行排序。。。。


3. 合并相同的词(Term)成为文档倒排(Posting List)链表。


在此表中,有几个定义:
  • Document Frequency  即文档频次,表示总共有多少文件包含此词(Term)。  
  • Frequency  即词频率,表示此文件中包含了几个此词(Term)。  
所以对词(Term) “allow”来讲,总共有两篇文档包含此词(Term),从而词(Term)后面的文档链表总共有两项,第一项表示包含“allow”的第一篇文档,即 1 号文档,此文档中,“allow”出现了 2 次,第二项表示包含“allow”的第二个文档,是 2 号文档,此文档中,“allow”出现了 1次。
到此为止,索引已经创建好了,我们可以通过它很快的找到我们想要的文档。而且在此过程中,我们惊喜地发现,搜索“drive”,“driving”,“drove”,“driven”也能够被搜到。因为在我们的索引中,“driving”,“drove”,“driven”都会经过语言处理而变成“drive”,在搜索时,如果您输入“driving”,输入的查询语句同样经过我们这里的一到三步,从而变为查询“drive”,从而可以搜索到想要的文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值