java - 为什么 Lucene 会锁定整个目录?为什么不只锁定单个 lucene 文件?

标签 java lucene directory locking

我正在编写一个自定义的 lucenene Directory 实现,并且想知道为什么 IndexWriter 锁定整个 Directory 实例而不是逐个文件锁定。

我还不太熟悉 Lucene 的内部结构,但根据我目前所读到的内容,我正在考虑将锁定限制为每个“luce 索引文件类型”的每个实例,以支持多个索引器的并发索引

我敢肯定,如果这很简单,那么现在很多其他人已经做到了;所以想知道为什么不这样做,为什么整个目录都被锁定了......

有人可以解释这样做的原因,以及为什么不按照我的建议去做吗?

谢谢, 桑巴

最佳答案

我想你对Lucene file format的理解过于简单化了。

不仅 Lucene 不像您建议的那样每个术语都使用一个文件,而且它还存储了许多其他重要信息 - 术语 vector 、频率、指针等。此外,它必须存储已删除的文件并执行合并(这是在幕后发生的!)——我可以向你保证整体的复杂性非常高。最重要的是,Lucene 提供了 transactional support and implements all ACID properties .拥有多个并发编写器,这一切都不可能轻易实现(甚至根本不可能)。换句话说,Lucene 面向 CA in CAP。 .

好处是从版本 4 开始,您可以 plug your own format ,所以请随意尝试并提出更好的替代方案。

关于java - 为什么 Lucene 会锁定整个目录?为什么不只锁定单个 lucene 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21112065/

相关文章:

excel - 将文件夹链接到 Excel 工作表

java - 无法从 Activity 访问 fragment 方法

vb.net - 使用 ListView 作为文件/文件夹资源管理器

java - 如何将变量中的数据添加到数组中?

data-structures - Lucene (Solr/ElasticSearch) 是如何快速进行过滤词条计数的?

c# - Lucene.net 范围查询 + 突出显示

search - Lucene Boost Confusion - 在文档或查询解析器的字段上设置提升?

python mkdir/makesdir 带有特殊符号的文件夹名称

java - java中简单的就地方阵顺时针旋转-我的代码有什么问题

Java Jigsaw JUnit 测试 - JUnit 不在模块中