文档获取/更新/删除时Lucene索引文件的更改?

时间:2014-11-26 11:26:39

标签: java solr lucene oracle12c

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

我索引了一个有100万行的用户表。 (记住LinkedIn用户表)

当我们添加文档/更新文档/删除文档时,有人能解释一下文件夹(文件被编入索引)的确切情况吗?

附加样本图片: Common Lucene Index folder

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

这只是一对多的关系结构(我们搜索时没有登录),稍后我会转到很多关系(连接,连接连接,用户的1:1索引文件夹)。

让我知道我的方法是对还是错。

1 个答案:

答案 0 :(得分:7)

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

在您的示例中,以_0开头的文件是第一个段,以_1开头的文件是第二个段。 .cfe.cfs文件是“复合文件”,它们包含该段的所有索引文件(有点像zip文件)。有关详细信息,请参阅file extensions and formats for the default codec

所以你的三个操作就像这样:

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

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

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

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