首页 > java > Lucene基础知识

Lucene基础知识

2007年8月2日 发表评论 阅读评论
A.        索引
Lucene索引可能由多个子索引组成,这些子索引成为段。每一段都是完整独立的索引,能被搜索。索引是这样作成的:
1.
为新加入的文档创建新段。
2. 合并已经存在的段。 搜索时需要涉及到多个段和/或者多个索引,每一个索引又可能由一些段组成。
 
为了使得基于项的搜索更有效率,索引中项是静态存储的。Lucene的索引属于索引方式中的倒排索引,因为对于一个项这种索引可以列出包含它的文档。这刚好是文档与项自然联系的倒置。
 
索引段维护着以下的信息:
·
域集合。包含了索引中用到的所有的域。
·
域值存储表。每一个文档都含有一个属性-值对的列表,属性即为域名。这个列表用来存储文档的一些附加信息,如标题,url或者访问数据库的一个ID。在搜索时存储域的集合可以被返回。这个表以文档号标识。
·
项字典。这个字典含有所有文档的所有域中使用过的的项,同时含有使用过它的文档的文档号,以及指向使用频数信息和位置信息的指针。
· 项频数信息。对于项字典中的每个项,这些信息包含含有这个项的文档的总数,以及每个文档中使用的次数。
·
项位置信息。对于项字典中的每个项,都存有在每个文档中出现的各个位置。
.
标准化因子。对于文档中的每一个域,存有一个值,用来以后乘以这个这个域的命中数(hits)。
· 被删除的文档信息。这是一个可选文件,用来表明那些文档已经删除了。
B.        文档(Document
Document:一个要进行索引的单元,相当于数据库的一行纪录,任何想要被索引的数据,都必须转化为Document对象存放。
内部的来说,Lucene用一个整形(interger)的文档号来指示文档。第一个被加入到索引中的文档就是0号,顺序加入的文档将得到一个由前一个号码递增而来的号码。注意文档号是可能改变的,所以在Lucene外部存储这些号码时必须小心。
特别的,号码的改变的情况如下: 只有段内的号码是相同的,不同段之间不同,因而在一个比段广泛的上下文环境中使用这些号码时,就必须改变它们。标准的技术是根据每一段号码多少为每一段分配一个段号。将段内文档号转换到段外时,加上段号。将某段外的文档号转换到段内时,根据每段中可能的转换后号码范围来判断文档属于那一段,并减调这一段的段号。例如有两个含5个文档的段合并,那么第一段的段号就是0,第二段段号5。第二段中的第三个文档,在段外的号码就是8· 文档删除后,连续的号码就出现了间断。这可以通过合并索引来解决,段合并时删除的文档相应也删掉了,新合并而成的段并没有号码间断。
 
C.        域的类型
    Document中的一个字段,相当于数据库中的Column
Lucene中,域的文本可能以逐字的非倒排的方式存储在索引中。而倒排过的域称为被索引过了。域也可能同时被存储和被索引。域的文本可能被分解许多项目而被索引,或者就被用作一个项目而被索引。大多数的域是被分解过的,但是有些时候某些标识符域被当做一个项目索引是很有用的。
D.      
存在于不同域中的同一个字串被认为是不同的项。因此项实际是用一对字串表示的,第一个字串是域名,第二个是域中的字串值。
E.        Field相关术语
  • Store
²        COMPRESS: 压缩保存。用于长文本或二进制数据
²        YES :保存
²        NO :不保存 适用于不用于返回显示,但需要进行检索内容
  • Index
²        NO :不 建索引;存放不能被搜索的内容如文档的一些附加属性如文档类型, URL
²        TOKENIZED :分词, 建索引;如文章内容、标题
²        UN_TOKENIZED :不分词, 建索引;如作者名,日期等
²        NO_NORMS :不分词, 建索引。但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间
  • TermVector
²        NO 不保存term vectors
²        YES 保存term vectors。
²        WITH_POSITIONS 保存term vectors。(保存值和token位置信息)
²        WITH_OFFSETS 保存term vectors。(保存值和Token的offset)WITH_POSITIONS_OFFSETS:保存term vectors。(保存值和token位置信息和Token的offset)
 
 
F.        组成结构
org.apache.Lucene.search/ 搜索入口
org.apache.Lucene.index/
索引入口
org.apache.Lucene.analysis/
语言分析器
org.apache.Lucene.queryParser/
查询分析器
org.apache.Lucene.document/
存储结构
org.apache.Lucene.store/
底层IO/存储结构
org.apache.Lucene.util/
一些公用的数据结构
分类: java 标签: 1,941 次阅读
原文链接:http://www.wenhq.com/article/view_101.html
欢迎转载,请注明出处:亲亲宝宝
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.