java – 文档获取/更新/删除时Lucene索引文件的更改?
我正在研究最新版本的Lucene 4.10.2,它结合了
Java作为前端,Oracle 12c作为数据库.
我已经索引了一个有100万行的用户表. (记住LinkedIn用户表) 当我们添加文档/更新文档/删除文档时,任何人都可以解释我文件夹(文件被索引)的确切变化吗? 附加样本图像: 我正在尝试理解Lucene文件夹的文件结构,其中放置了所有索引文件. 这只是一对多的关系结构(我们搜索没有登录),稍后我会转到很多关系(连接,连接连接,用户的1:1索引文件夹). 如果我的方法是正确/错误,请告诉我. 解决方法
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/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |