`
eimhee
  • 浏览: 2112573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene 反向索引原理

    博客分类:
  • JAVA
阅读更多

lucene是一个高性能的全文搜索工具, 使用反向索引结构。 下面将介绍lucene结构与算法.

 

 

例子:

有两篇文章:

文章 1 : Tom lives in Guangzhou, I live in Guangzhou too. 
文章 2 : He once lived in Shanghai. 

 

  1)

 

既然lucene是使用关键字索引和查询, 我们会采用下面的步骤处理这些关键字

 

A. 先要逐字识别出文章的字, 英文通常是用空格分割的。中文两个字却是在一起的。

B. 英文文章中的"in, 'once', 'too'没有什么实际的意义, 中文文章的"和", “是”也没什么意义, 也要根据语境去过滤掉

C.大小写会当成同一个字, 比如"He","he"

D. 单复数, 过去式也要简化成原型。 比如"lives"=>"live", "lived"=>live,

E.文章标点要能通过路lucene的分词器过滤掉

 

 

根据上面的处理:


  文章 1 中的关键字: [tom] [live] [guangzhou] [i] [live] [guangzhou] 
  文章 2 中的关键字: [he] [live] [shanghai] 

 

 

  2)

根据这些关键字, 我们可以建立反射索引。 正向的索引是 “文章”里包含“所有的关键字”。 反向索引是指反转这种关系,变成“关键字” 在“所有包含这个关键字”。 这两篇文章反向索引之后,

关键字         文章 

  Guangzhou 1 
  He 2 
  I 1 
  Live 1,2 
  Shanghai 2 
  Tom 1

 

 

 

我们仅仅知道关键字在哪一些文章之中还是不够的, 我们还需要知道关键字在文章的频率和位置, 通常这里有两个位置:

a) 字符位置

b)关键字位置

 

添加文章的频率和位置后, 我们的索引变为:

Key words the article appeared frequency position 
Guangzhou 1 2 3,6 
He 2 1 1
I 1 1 4
Live 1 [2] 2
Shanghai 2 1 3
Tom 1 1 1

 

live 还有一个位置是2,5,2 

 

 

 

Lucene的索引结构是最核心部分。 我们可以看到关键字是按字母排序的,lucene的二分法查找能很快找到关键的位置。

 

 

 

 

从上可以看出一个索引由三部分组成 document (Term Dictionary), frequency document (frequencies), the position paper (positions)。索引中不仅只有关键字, 还有频率, 位置。一些指导信息可以能过关键字和位置找到。

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics