0%

Lucene中的索引过程和基本操作

Lucene索引过程学习。

索引过程

1
提取数据 -> 分析文本 -> 添加文档到索引

提取文本

建立索引数据时,需要先从数据中提取纯文本格式信息。

提取完文档后还需要建立Document文档。

分析文档

建立Document和Field后,会对文本进行分析,将文本分割成词项,这一步就是进行分词等操作。比如需要将词项转换为小写,去掉一些stop words等等。

向索引添加文档

分析完数据后,就可以将分析结果写入索引文件。存储的时候是使用倒排索引的数据结构进行存储。进行关键字快速查找时,这种数据结构能有效利用磁盘空间。

Lucene索引都包含一个或多个段segment,每个段都是一个独立索引,包含整个文档索引的一个子集。

每个段都包含多个文件,各个独立的文件共同组成了索引的不同组成部分(Term向量、存储的Field、倒排索引等等)。

如果使用了混合文件格式,上面说的索引文件都会被压缩成一个单一的文件,这种方式能够在搜索期间减少打开文件数量。

还有个特殊文件叫段文件,segments_x x=1,2,3...,该文件指向所有激活的segment,Lucene会首先打开该文件,然后打开它所指向的其他文件,其中的x(x=1,2,3…)被称为the generation,是一个整数,Lucene每次向索引提交更改的时候,都会将这个数字加1

IndexWriter会周期性的选择一些segment,将它们合并到一个新segment中,然后删除老的segment

索引基本操作

向索引添加文档

  • addDocument(Document),添加文档,其中使用的Analyzer在创建IndexWriter时,由IndexWriterConfig中指定。

删除索引中的文档

  • deleteDocuments(Term...),删除包含指定词项的文档
  • deleteDocuments(Query...),删除匹配查询语句的文档

更新索引中的文档

Lucene只能删除整个旧文档,然后向索引中添加新文档。这就要求新文档必须包含旧文档中所有Field,包括未发生变化的Field。

  • updateDocument(Term, Document),首先删除包含Term的文档,然后添加新文档

参考

  • Lucene实战
坚持原创技术分享,您的支持将鼓励我继续创作!
Fork me on GitHub