??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一区二区三区日韩,中文字幕佐山爱一区二区免费,国产福利在线观看http://www.aygfsteel.com/jiabao/category/35276.html會只會i垂青有准備的hQ運氣不是每個h都有?zh-cnFri, 17 Oct 2008 02:15:11 GMTFri, 17 Oct 2008 02:15:11 GMT60Lucene倒排索引原理(? http://www.aygfsteel.com/jiabao/archive/2008/10/17/234822.html金家?/dc:creator>金家?/author>Fri, 17 Oct 2008 01:43:00 GMThttp://www.aygfsteel.com/jiabao/archive/2008/10/17/234822.htmlhttp://www.aygfsteel.com/jiabao/comments/234822.htmlhttp://www.aygfsteel.com/jiabao/archive/2008/10/17/234822.html#Feedback0http://www.aygfsteel.com/jiabao/comments/commentRss/234822.htmlhttp://www.aygfsteel.com/jiabao/services/trackbacks/234822.html
0Q设有两文??
文章1的内容ؓQTom lives in Guangzhou,I live in Guangzhou too.
文章2的内容ؓQHe once lived in Shanghai.

1)׃lucene是基于关键词索引和查询的Q首先我们要取得q两文章的关键词,通常我们需要如下处理措?br />a.我们现在有的是文章内容,即一个字W串Q我们先要找出字W串中的所有单词,卛_词。英文单词由于用I格分隔Q比较好处理。中文单词间是连在一L需要特D的分词处理?br />b.文章中的”in? “once” “too”等词没有什么实际意义,中文中的“的”“是”等字通常也无具体含义Q这些不代表概念的词可以qo?br />c.用户通常希望查“He”时能把含“he”,“HE”的文章也找出来Q所以所有单词需要统一大小写?br />d.用户通常希望查“live”时能把含“lives”,“lived”的文章也找出来Q所以需要把“lives”,“lived”还原成“live?br />e.文章中的标点W号通常不表C某U概念,也可以过滤掉
在lucene中以上措施由Analyzercd?br />
l过上面处理?br />    文章1的所有关键词为:[tom] [live] [guangzhou] [i] [live] [guangzhou]
    文章2的所有关键词为:[he] [live] [shanghai]

2) 有了关键词后Q我们就可以建立倒排索引了。上面的对应关系是:“文章号”对“文章中所有关键词”。倒排索引把这个关pd过来,变成Q“关键词”对“拥有该关键词的所有文章号”。文?Q?l过倒排后变?br />关键词   文章号
guangzhou  1
he         2
i           1
live       1,2
shanghai   2
tom         1

通常仅知道关键词在哪些文章中出现q不够,我们q需要知道关键词在文章中出现ơ数和出现的位置Q通常有两U位|:a)字符位置Q即记录该词是文章中W几个字W(优点是关键词亮显时定位快Q;b)关键词位|,卌录该词是文章中第几个关键词(优点是节U烦引空间、词l(phaseQ查询快Q,lucene中记录的是q种位置?br />
加上“出现频率”和“出C|”信息后Q我们的索引l构变ؓQ?br />关键词   文章号[出现频率]   出现位置
guangzhou 1[2]               3Q?
he       2[1]               1
i         1[1]               4
live      1[2],2[1]           2Q?Q?
shanghai  2[1]               3
tom      1[1]               1

以live q行Z我们说明一下该l构Qlive在文?中出C2ơ,文章2中出C一ơ,它的出现位置为?,5,2”这表示什么呢Q我们需要结合文章号和出现频率来分析Q文?中出C2ơ,那么?,5”就表示live在文?中出现的两个位置Q文?中出C一ơ,剩下的?”就表示live是文?中第 2个关键字?br />    
以上是lucene索引l构中最核心的部分。我们注意到关键字是按字W顺序排列的Qlucene没有使用B树结构)Q因此lucene可以用二元搜索算法快速定位关键词?br />    
实现时 lucene上面三列分别作典文ӞTerm DictionaryQ、频率文?frequencies)、位|文?(positions)保存。其中词典文件不仅保存有每个关键词,q保留了指向频率文g和位|文件的指针Q通过指针可以扑ֈ该关键字的频率信息和位置信息?br />
    Lucene中用了field的概念,用于表达信息所在位|(如标题中Q文章中Qurl中)Q在建烦引中Q该field信息也记录在词典文g中,每个关键词都有一个field信息(因ؓ每个关键字一定属于一个或多个field)?br />
     Z减小索引文g的大,Lucene对烦引还使用了压~技术。首先,对词典文件中的关键词q行了压~,关键词压~ؓ<前缀长度Q后~>Q例如:当前词ؓ“阿拉伯语”,上一个词为“阿拉伯”,那么“阿拉伯语”压~ؓ<3Q语>。其ơ大量用到的是对数字的压~,数字只保存与上一个值的差|q样可以减小数字的长度,q而减保存该数字需要的字节敎ͼ。例如当前文章号?6389Q不压羃要用3个字节保存)Q上一文章h16382Q压~后保存7Q只用一个字节)?br />    
    下面我们可以通过对该索引的查询来解释一下ؓ什么要建立索引?br />假设要查询单词 “live”,lucene先对词典二元查找、找到该词,通过指向频率文g的指针读出所有文章号Q然后返回结果。词兔R常非常,因而,整个q程的时间是毫秒U的?br />而用普通的序匚w法Q不建烦引,而是Ҏ有文章的内容q行字符串匹配,q个q程会相当~慢Q当文章数目很大Ӟ旉往往是无法忍受的?


]]>
վ֩ģ壺 | ɽ| | ˮ| ӳ| ĵ| | | | | ˮ| ¦| | | Ϫ| | ʡ| | | ϲ| °Ͷ| ɽ| | ƺ| | ǡ| | | ͨ| | ˫| ˮ| ɽ| Ͷ| | | ˮ| ԣ| ƺ| | |