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

vip*_*ana 3 java lucene solr oracle12c

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

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

当我们添加文档/更新文档/删除文档时,任何人都可以解释我文件夹(文件被索引)的确切变化吗?

附加样本图像: 常见的Lucene Index文件夹

我正在尝试理解Lucene文件夹的文件结构,其中放置了所有索引文件.

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

如果我的方法是正确/错误,请告诉我.

bco*_*lan 7

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

在您的示例中,以文件开头的文件_0是第一个段,以文件开头的文件_1是第二个段.在.cfe.cfs文件是"复合文件",它们包含所有的索引文件的该段(有点像一个zip文件).有关详细信息,请参阅默认编解码器文件扩展名和格式.

所以你的三个操作是这样的:

添加:文档将始终添加到新段中.

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

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

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