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