C# Lucene.NET-检查索引中是否存在文档

C# Lucene.NET-检查索引中是否存在文档,c#,lucene,lucene.net,C#,Lucene,Lucene.net,我想检查我的Lucene.NET(4.0)索引中是否已经存在文档。我已尝试使用来自的以下代码 但是我得到一个错误,告诉我阅读器未分配。我在谷歌上搜索了很多,但在Lucene.NET4中找不到一个可行的答案,这应该是一个相当简单的任务 edit:IndexReader是一个抽象类。在文档中,它说用Lucene.Net.Store.Directory作为参数调用IndexReader.Open(),但它本身是抽象的。我得到的代码示例使用它,就好像它不是。此外,在我链接到用户的帖子中,用户说第一段代码

我想检查我的Lucene.NET(4.0)索引中是否已经存在文档。我已尝试使用来自的以下代码

但是我得到一个错误,告诉我
阅读器
未分配。我在谷歌上搜索了很多,但在Lucene.NET4中找不到一个可行的答案,这应该是一个相当简单的任务

edit
IndexReader
是一个抽象类。在文档中,它说用
Lucene.Net.Store.Directory
作为参数调用
IndexReader.Open()
,但它本身是抽象的。我得到的代码示例使用它,就好像它不是。此外,在我链接到用户的帖子中,用户说第一段代码有效

EDIT2:我现在有了可编译的代码。这是:

bool exists = false;
IndexReader reader = IndexReader.Open(Lucene.Net.Store.FSDirectory.Open(lucenePath), false);
Term term = new Term("filepath", "\\myFile.PDF");
TermDocs docs = reader.TermDocs(term);
if (docs.Next())
{
   exists = true;
}

文件
myFile.PDF
肯定存在,但它总是以false返回。当我在调试中查看
docs
时,它的
Doc
Freq
属性声明它们“抛出了类型为“
System.NullReferenceException
”的异常。

您没有将
读取器设置为任何内容。您需要在使用它之前对其进行初始化。您可以这样做,因为您有索引的路径,使用:

IndexReader reader = IndexReader.Open(indexDirectoryPath);
或:

或:

其中,
indexDirectoryPath
在所有情况下都是索引位置的完整路径,为
字符串。使用哪种方式取决于使用的Lucene.Net版本


此外,请确保在完成读卡器后关闭它(通过调用
reader.close()
),否则可能会出现文件锁定问题。

IndexReader.Open()没有只需要字符串的重载。对于我来说,有5个重载,其中一个接受Lucene.Net.Store.Directory(),它本身我无法实例化。我已经编辑了我的原始帖子,并提供了更多详细信息。谢谢你的帮助Adrian。我现在已经有了可编译的代码,但仍然有困难。我已经更新了这个问题。@JohnSmith:我会将这个编辑作为一个新问题提问。关于StackOverflow的问题应该是关于一个特定问题的,其他问题ise他们往往会被否决或关闭。顺便说一句,请看一下。它使您能够在UI中浏览索引的内容。您应该能够检查索引中是否有您期望的内容。可以,谢谢。我在这里创建了一个新问题:如果您能帮上忙,我将向上投票/“回答”您的问题。可能重复硅酸盐
IndexReader reader = IndexReader.Open(indexDirectoryPath);
Directory directory = FSDirectory.Open(indexDirectoryPath);
IndexReader reader = IndexReader.Open(directory);
DirectoryInfo directoryInfo = new DirectoryInfo(indexDirectoryPath);
Directory directory = FSDirectory.Open(directoryInfo);
IndexReader reader = IndexReader.Open(directory);