Lucene.NET - 检查是否在存在索引文件(Lucene.NET - check if do

2019-10-19 04:52发布

我要检查文件是否已存在于我的Lucene.NET(4.0)指数。 我曾尝试使用下面的代码从试过这个职位 。

IndexReader reader;
Term indexTerm = new Term("filepath", "C:\\my\\path");
TermDocs docs = reader.TermDocs(indexTerm);
if (docs.Next())
{
    continue;
}

但是,我得到一个错误,告诉我说, reader是未分配。 我有这个Google搜索了很多,无法找到Lucene.NET 4什么应该是一个相当简单的任务工作的答案。

编辑IndexReader是一个抽象类。 在本文档中,它说叫IndexReader.Open()Lucene.Net.Store.Directory作为参数,但它本身是抽象的。 代码样本,我得到使用它,如果它不是。 此外,在我链接到用户的帖子说的代码的第一段工作。

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肯定存在,但它总是回来为假。 当我看到docs的调试,它的DocFreq特性声明,他们“扔类型的异常‘ System.NullReferenceException ’。

Answer 1:

您还没有设置reader是什么。 您需要在使用前初始化它。 你可以做到这一点,你必须使用索引的路径:

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);

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

此外,请确保您关闭读者,当你用它完成(通过调用reader.Close()否则你可能会得到文件锁定问题。



文章来源: Lucene.NET - check if document exists in index