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

时间:2014-01-04 21:57:06

标签: c# lucene lucene.net

这似乎应该是显而易见的,但我没有找到任何关于正确处理Lucene.net 3.0.3中读者和作者的正确方法的可靠信息。我从文档中得到的理解是我可以拥有一个静态的IndexWriter,它本身就是线程安全的,我可以调用GetReader来根据需要从该作者那里获取读者。

我通过在我的构造函数中初始化静态编写器(下面的代码)尝试了这个,但是当我对此进行搜索时,我得到_0.cfs FileNotFound异常(索引为空,我没有保存任何文档,但是我在我的文件夹中有segment_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);

1 个答案:

答案 0 :(得分:4)

我会删除索引文件夹,只需让lucene创建它。如果您手动创建了这些段文件,请不要这样做...另外,如果这些只是两个文件,则实际上缺少write.lock。

只是为了给你一个应该运行的运行示例。如果您创建一个空的控制台项目并将其粘贴到main:

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”,添加一个文档并在最后找到它。

也许这可以帮助你开始......