`
szy56szy
  • 浏览: 12635 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

lucene索引格式

 
阅读更多

lucene索引格式
2011年07月01日
  本文描述的是在lucene2.9中使用的索引文件格式。如果你使用的另外一个版本的lucene,那么请参考相应版本的 docs/fileformat.html 这个文件。
  Apache Lucene 是由java写的,但lucene也有其他语言的实现版本。 如果其他语言的实现版本要和Apache lucene保持兼容性的话,那么lucene的索引格式就应该是与具体的语言实现无关。本文志在从与实现语言无关的角度来描述Apache lucene的索引格式。
  随着Lucene的版本的更新,本文也会随之更新。不同语言的Lucene的实现,应该要在索引格式上达成一致。本文会提到兼容性的问题,描述了怎样从老版本的索引格式升级到新版的索引格式。
  在版本2.1中,索引文件格式有一个重要的变化,它不再需要 提交锁了。(在2.1版本以前,提交的时候会生成一个文件,叫做锁文件)。这种改变是向前兼容的,使用2.1及之后的版本,我们可以打开2.1之前的版本的索引。当新的segments文件被保存的时候(也就是提交操作),新的segments会使用新的索引格式(这就意味着,不需要特别的升级--从2.1之前升级到2.1)。但是要注意的是,一旦一个提交操作发生,那么2.1之前的lucene版本就无法读取新的索引了。
  在版本2.3以后,新的索引格式允许不同的segments之前可以共享同一个doc store (vector 和 stored field)文件。这能使索引在某些情况下性能更好。这个特性也是向前兼容的。 The fundamental concepts in Lucene are index, document, field and term.  Lucene中最基本的概念是index,document,field 和term。
  一个index由一系列的document组成。
  一个document有一系列的field组成。
  一个field由一系列的term组成。
  一个term就是一个string。
  在不同field种的相同的string是要被当成不同的term的。terms其实由一对string组成,第一个string是field的name,第二个string是真正的词条。  索引存储的是关于词条的信息,这样能使基于词条的搜索更有效。Lucene使用的是倒排索引。这样的索引存储的是包含某个词条的的文档集合。说是倒排索引,是相对于正常的情况来说的,在正常的情况下,是文档包含词条。 lucene也提供存储的功能,field的原始值可以被存起来,被存储起来的field称为stored。被索引起来的field被称为indexed。一个field既可以是stored也可以是indexed。field的文本既可以经过切词之后被索引,也可以整个文本当成一个词条被索引。大多数的field是要切词的,不过有些时候我们需要将整个文本当成词条索引起来。 具体的关于field的情况可以参考这里 Field。 Lucene的索引可以由多个子索引或者说是segment组成。每一个segment都是完全独立的索引,都是可以被单独搜索的。索引产生的方法主要有两种: 为新的文档创建新的segment。 合并已经存在的segment而产生的segment。 一个搜索有可能涉及到多个索引,一个索引可以是由多个segment组成。 lucene会为每一个document安排一个document number(文档序号)。第一个文档序号是0,之后的文档序号都要比之前的文档序号大。
  document number 是会变的。如果一般不要轻易在lucene外部使用document number。一般来说,document number在下面的一些情况中会变化。 首先需要知道的是,document number只是在segment内部是唯一的。如果同时使用几个segment的时候,局部的的document number需要被转化成为全局的唯一的document number。一个很简单的做法是这样的,给每个segment指定一个基值,在基于这些基值将局部的document number转换成全局的。 当文档被删除的时候,document number就不连续了,也就是document number之间有了空隙。这些空隙会在下次合并操作的时候被消除,要删除的文档也是在合并的时候真正被删除的。由此来看,我们可以知道,刚合并完的segment应该是没有空隙的。 下面 列出的是每个segment都会包含的文件:  Field names. 这个文件包含了索引中使用到的field的名称 Stored Field values. 这个文件是一个attribute-value的集合,attribute 指的是field name。这个文件用来存储document的信息的,比如说它的标题、url、或者访问数据库时要用到的数据库。这个文件里面存的就是搜索结果出来的时候要返回的东西。它们可以根据document number进行查找。 一个词条的集合,包含了索引中所有的词条。Term dictionary中,除了词条信息,也有存储了包含该词条的文档的编号以及该词条在词频文件和term proximity文件中的位置。 Term Frequency data. For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document if omitTf is false.  Term Proximity data. For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents set omitTf to true.  Normalization factors. For each field in each document, a value is stored that is multiplied into the score for hits on that field.  Term Vectors. For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors  Deleted documents. An optional file indicating which documents are deleted.  Details on each of these are provided in subsequent sections.  
  
  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics