首页 > 解决方案 > 打开lucene目录时如何指定readonly=false?

问题描述

FSDirectory.open(Paths.get("/path/to/index))用来获取对包含我的 lucene 索引数据的目录的引用。

我想获得一个 IndexReader ,它可以通过readOnly,因为它根据文档提供了更好的性能。

没有任何方法DirectoryReader提供此选项。有什么想法该怎么做?

标签: javalucene

解决方案


我相信这只适用于非常旧的 Lucene 版本。

例如,查看3.5.0 版IndexReader的javadoc (早在 2011 年),它指出:

可以使用接受布尔 readOnly 参数的静态打开方法打开只读 IndexReader。这样的阅读器具有更好的并发性,因为不需要在 isDeleted 方法上进行同步。

你会看到open()这个这样的方法,它采用“只读”布尔值。

但是,从(至少)5.5.0 版开始,这不再适用。查看IndexReader该版本的 javadoc,它指出:

IndexReader 实例是完全线程安全的,这意味着多个线程可以同时调用它的任何方法。

在最新版本(当前为 8.5.2)中仍然如此。

因此,除非您使用的是非常旧的 Lucene 版本,否则您无需为此做任何事情。演示代码示例也反映了这一点。


推荐阅读