gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:52:25 26 4
gpt4 key购买 nike

这看起来应该是显而易见的,但我没有找到任何可靠的信息来正确处理 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);
}

在 Debug模式下运行时,它应该在 bin/Debug 下创建一个文件夹“LuceneIndex”,添加一个文档,应该在最后找到它。

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

关于c# - 在 Lucene .NET 中获取读者/作者的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com