Indexing 如何识别文件夹中是否存在Lucene.Net索引?

Indexing 如何识别文件夹中是否存在Lucene.Net索引?,indexing,full-text-search,lucene.net,search,full-text-indexing,Indexing,Full Text Search,Lucene.net,Search,Full Text Indexing,我正在使用Lucene.Net对文档进行索引和搜索,如果存在索引,我将使用以下代码创建或打开索引: IndexWriter writer = new IndexWriter(@"C:\index", new StandardAnalyzer(), !IndexExists); ... private bool IndexExists { get { return ?? } } 现在,如何以简单的方式实现indexists?我不需要抛出任何异常。静态方

我正在使用Lucene.Net对文档进行索引和搜索,如果存在索引,我将使用以下代码创建或打开索引:

IndexWriter writer = new IndexWriter(@"C:\index", new StandardAnalyzer(), !IndexExists);

...

private bool IndexExists
{
    get
    {
        return ??
    }
}

现在,如何以简单的方式实现
indexists
?我不需要抛出任何异常。

静态方法IndexReader.IndexExists(字符串路径)(或其重载之一)似乎非常合适。

您可以使用不接受布尔参数的构造函数。这将打开一个现有的索引(如果有),或者创建一个新的索引(如果不存在)


Java文档链接(与Lucene.Net相同):
http://lucene.apache.org/java/2_3_1/api/org/apache/lucene/index/IndexWriter.html#IndexWriter(org.apache.lucene.store.Directory,org.apache.lucene.analysis.Analyzer)

我也试图找到这个anwser,但没有成功,下面是我在代码中使用的方法:

私人布尔指数存在者 { 得到 { return IndexDirectory.FileExists(“segments.gen”); }
}<4.0中的是
IndexReader.indexists(org.apache.lucene.store.Directory)


在>4.0中是
DirectoryReader.indexists(org.apache.lucene.store.Directory)

我知道这是一个旧条目,但Sean Carpenter发布的内容是完全正确的,这个构造函数甚至存在于最新版本的lucene.NET中。IndexWriter类的文档可在此处找到: 哎呀

这是“纯Java”Lucene,但它很可能适用于其他种类

在Lucene 4.0.0中,
DirectoryReader.indexists()的API说

如果指定目录中存在索引,则返回true

但是在Lucene 4.10.2中,
DirectoryReader.indexists()的API说

如果指定目录中可能存在索引,则返回true。 请注意,如果存在损坏的索引,或者索引正在 承诺

。。。是的,它在句中打断了。注意:我直接从源代码编译了Javadoc,但在在线API中可以看到相同的未完成短语。不仅如此,我还研究了Lucene 6.0.0 API,它完全相同

然而,“返回”一词是:

如果存在索引,则为true;否则就错了

。。。但我目前认为空目录有时会(?)返回
true
(从我的单元测试中)。无论如何,我不会相信它

如果在空目录上创建一个
IndexReader
,那么它的所有方法都将返回,而不会引发异常。您可以转到
indexReader.numDocs()
,这将返回0,但这并不证明那里没有索引,只证明那里没有
文档。当然,这取决于您的需求,可能已经足够了

类似地,您可以从这样的
索引阅读器
创建
索引搜索器
,也可以创建
索引编写器
。对于空目录,所有这些都不会有任何明显的问题

更好的解决方案:

    try {
        directoryReader = DirectoryReader.open( fsDir );
    } catch ( org.apache.lucene.index.IndexNotFoundException e) {
        ...
    }

据我所知,这似乎是可靠的。

Lucene.net没有此重载。哪个版本的Lucene.net缺少此重载?它在2.4中,我使用的是“纯Java”Lucene<4.10中的code>IndexWriter
+只有一个构造函数。但我不明白你怎么能从你的答案中得到发问者想要的:找出那里是否已经有了索引。聪明。。。而且可能是目前最好的方法(请参阅我的答案:4.10.+自4.0.+以来更改了
DirectoryReader.indexists()
的规范)。但当然,我相信您也知道,您的解决方案很容易受到版本更改的影响。必须检查每个新版本!这称为
DirectoryReader.indexExists
现在: