提问者:小点点

当文档被添加/更新/删除时Lucene索引文件的变化?


我正在开发最新版本的Lucene 4.10.2,将Java作为前端,Oracle 12c作为数据库。

我已经为一个具有100万行的用户表编制了索引。(记住LinkedIn用户表)

有人能告诉我,当我们添加文档/更新文档/删除文档时,文件夹(文件的索引位置)会发生什么情况吗?

我正在尝试了解放置所有索引文件的Lucene文件夹的文件结构。

这只是一个多关系结构(我们在不登录的情况下进行搜索),稍后我将转到多关系(连接、连接的连接、用户的1:1索引文件夹)。

让我知道我的方法是否正确/错误。


共1个答案

匿名用户

Lucene索引由多个“段”组成。每个段只写一次,要么是在您调用提交()时,要么是在自动调用提交()时(通过将IndexWriter设置为当RAM使用量达到给定阈值时自动提交)。通常,当您搜索索引时,每个段都被顺序搜索并将结果合并在一起。Lucene以这种方式工作的原因是因为修改段将是一个非常缓慢的过程。段可以合并在一起以提高搜索性能。[1]

在您的示例中,以< code>_0开头的文件是第一个段,以< code>_1开头的文件是第二个段。<代码>。cfe和< code >。cfs文件是“复合文件”,它们包含该段的所有索引文件(有点像zip文件)。有关更多信息,请参见默认编解码器的文件扩展名和格式。

因此,您的三个操作如下:

添加:文档将始终添加到新部分。

删除:已删除的文档实际上不会从索引中删除。相反,将设置一个标志来指示文档已删除。未删除的文档称为“实时文档”。已删除的文档仍会影响通过“文档频率”字段的评分,并且在合并区段之前不会更新。

更新:更新只是原子的添加和删除。

[1]http://blog.trifork.com/2011/11/21/simon-says-optimize-is-bad-for-you/