Java 文档被添加/更新/删除时Lucene索引文件的更改?

Java 文档被添加/更新/删除时Lucene索引文件的更改?,java,solr,lucene,oracle12c,Java,Solr,Lucene,Oracle12c,我正在开发最新版本的Lucene 4.10.2,其中Java作为前端,Oracle 12c作为数据库 我为一个有一百万行的用户表编制了索引。(记住LinkedIn用户表) 谁能解释一下,当我们添加文档/更新文档/删除文档时,文件夹(文件被索引的地方)到底发生了什么 附加示例图像: 我试图理解Lucene文件夹的文件结构,所有索引文件都放在这个文件夹中 这只是一个多关系结构(我们搜索时不登录),稍后我将转到多关系(连接、连接的连接、用户的1:1索引文件夹) 让我知道我的方法是否正确。Lucene

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

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

谁能解释一下,当我们添加文档/更新文档/删除文档时,文件夹(文件被索引的地方)到底发生了什么

附加示例图像:

我试图理解Lucene文件夹的文件结构,所有索引文件都放在这个文件夹中

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


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

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

在您的示例中,以
\u 0
开头的文件是第一段,以
\u 1
开头的文件是第二段。
.cfe
.cfs
文件是“复合文件”,它们包含该段的所有索引文件(有点像zip文件)。有关更多信息,请参阅

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

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

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

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


[1]

我有同样的问题..请回答如果有人反对@bcoughlan,这是一些解释:)有可能更改Lucene制作的@bcoughlan文件的名称吗