C# 在Lucene.NET中获取读者/作者的正确方法

C# 在Lucene.NET中获取读者/作者的正确方法,c#,lucene,lucene.net,C#,Lucene,Lucene.net,这似乎应该是显而易见的,但我没有运气找到任何可靠的信息来正确处理Lucene.net 3.0.3中的读者和作者。。我从文档中了解到,我可以拥有一个本质上是线程安全的静态IndexWriter,我可以根据需要调用GetReader从该编写器获取读者 我在下面的构造函数代码中初始化了一个静态编写器,尝试了这一点,但当我对其进行搜索时,我得到了_0.cfs FileNotFound异常。索引为空,我没有保存任何文档,但我的文件夹中确实有segments_1和segments.gen。。我还缺什么呢 _

这似乎应该是显而易见的,但我没有运气找到任何可靠的信息来正确处理Lucene.net 3.0.3中的读者和作者。。我从文档中了解到,我可以拥有一个本质上是线程安全的静态IndexWriter,我可以根据需要调用GetReader从该编写器获取读者

我在下面的构造函数代码中初始化了一个静态编写器,尝试了这一点,但当我对其进行搜索时,我得到了_0.cfs FileNotFound异常。索引为空,我没有保存任何文档,但我的文件夹中确实有segments_1和segments.gen。。我还缺什么呢

_luceneDir = Path.Combine(indexFolder, string.Format("{0}.index", accountId));
Console.WriteLine("Starting up search with index at {0}", _luceneDir);
if(luceneIndexDirectory == null)
    luceneIndexDirectory = FSDirectory.Open(_luceneDir);
if(IndexWriter.IsLocked(luceneIndexDirectory)) 
    IndexWriter.Unlock(luceneIndexDirectory);
if (indexWriter == null)
    indexWriter = new IndexWriter(luceneIndexDirectory, standardAnalyzer, IndexWriter.MaxFieldLength.UNLIMITED);

我会删除索引文件夹,然后让lucene创建它。如果您手动创建了这些段文件,请不要这样做。。。此外,如果这是仅有的两个文件,那么write.lock实际上丢失了

只是给你一个运行的例子,这应该是可行的。如果创建空控制台项目并将其粘贴到主控制台中:

using (Directory directory = FSDirectory.Open("LuceneIndex"))
using (Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
using (IndexWriter writer = new IndexWriter(directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
using (IndexReader reader = writer.GetReader())
{
    writer.DeleteAll();

    var doc = new Lucene.Net.Documents.Document();
    doc.Add(new Lucene.Net.Documents.Field("ID", "1", Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NOT_ANALYZED, Lucene.Net.Documents.Field.TermVector.NO));
    doc.Add(new Lucene.Net.Documents.Field("txt", "text", Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NOT_ANALYZED, Lucene.Net.Documents.Field.TermVector.NO));

    writer.AddDocument(doc);
    writer.Optimize();
    writer.Flush(true, true, true);

    Query query = new TermQuery(new Term("txt", "text"));
    //Setup searcher
    IndexSearcher searcher = new IndexSearcher(directory);
    //Do the search
    TopDocs hits = searcher.Search(query, 10);
}
在调试模式下运行时,它应该在bin/Debug下创建一个文件夹LuceneIndex,添加一个文档,并在末尾找到它


也许这可以帮助你开始…

我会删除索引文件夹,然后让lucene创建它。如果您手动创建了这些段文件,请不要这样做。。。此外,如果这是仅有的两个文件,那么write.lock实际上丢失了

只是给你一个运行的例子,这应该是可行的。如果创建空控制台项目并将其粘贴到主控制台中:

using (Directory directory = FSDirectory.Open("LuceneIndex"))
using (Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
using (IndexWriter writer = new IndexWriter(directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
using (IndexReader reader = writer.GetReader())
{
    writer.DeleteAll();

    var doc = new Lucene.Net.Documents.Document();
    doc.Add(new Lucene.Net.Documents.Field("ID", "1", Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NOT_ANALYZED, Lucene.Net.Documents.Field.TermVector.NO));
    doc.Add(new Lucene.Net.Documents.Field("txt", "text", Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NOT_ANALYZED, Lucene.Net.Documents.Field.TermVector.NO));

    writer.AddDocument(doc);
    writer.Optimize();
    writer.Flush(true, true, true);

    Query query = new TermQuery(new Term("txt", "text"));
    //Setup searcher
    IndexSearcher searcher = new IndexSearcher(directory);
    //Do the search
    TopDocs hits = searcher.Search(query, 10);
}
在调试模式下运行时,它应该在bin/Debug下创建一个文件夹LuceneIndex,添加一个文档,并在末尾找到它

也许这有助于你开始