.net core 无法创建Lucene.Net StandardAnalyzer的实例
我正在尝试使用Lucene.NET,我将遵循此链接上提供的文档 我正在使用Lucene版本(4.8.0-beta00012)和.NET Core 5.0版本 我在创建StandardAnalyzer对象的实例时遇到异常.net core 无法创建Lucene.Net StandardAnalyzer的实例,.net-core,indexing,lucene,lucene.net,.net Core,Indexing,Lucene,Lucene.net,我正在尝试使用Lucene.NET,我将遵循此链接上提供的文档 我正在使用Lucene版本(4.8.0-beta00012)和.NET Core 5.0版本 我在创建StandardAnalyzer对象的实例时遇到异常 const LuceneVersion AppLuceneVersion = LuceneVersion.LUCENE_48; // Create an analyzer to process the text var analy
const LuceneVersion AppLuceneVersion = LuceneVersion.LUCENE_48;
// Create an analyzer to process the text
var analyzer = new StandardAnalyzer(AppLuceneVersion);
我得到的例外是
“Lucene.Net.Analysis.Standard.StandardAnalyzer”的类型初始值设定项引发异常
找不到方法:“System.Collections.Generic.List`1 Lucene.Net.Support.Arrays.AsList(!!0[])”
非常感谢您的帮助,因为我无法继续进行我的POC。这是一个非常奇怪的错误消息。似乎是说系统找不到泛型列表类型。在.Net 5中,此类型存储在此处: region Assembly System.Collections,版本=5.0.0.0,区域性=neutral,PublicKeyToken=b03f5f7f11d50a3a //C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\5.0.0\Ref\net5.0\System.Collections.dll 虽然您看到错误是因为StandardAnalyzer使用这种类型,而系统无法找到它,但问题很可能与Lucene.Net本身无关。您可以通过尝试执行以下操作来测试该理论:
List<string> list = new List<string>();
list.Add("hello world");
@安德鲁·詹姆斯:谢谢你的主意。使用v3.0.3无法与Azure directory和.net core配合使用,但您的评论确实引导了我的想法,我使用了Lucene.net的早期beta版本,似乎4.8.0-beta06效果良好。谢谢您。我陷入了困境,认为
安装包Lucene.Net-Pre
就足够了。但是在运行安装包Lucene.Net.Analysis.Common-Version 4.8.0-beta00013
之后,我能够找到4.8缺少的组件,例如使用Lucene.Net.Analysis.Standard的via代码>。
[Fact]
public void TestStandardAnalyzer() {
Directory indexDir = new RAMDirectory();
Analyzer standardAnalyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);
IndexWriterConfig indexConfig = new IndexWriterConfig(LuceneVersion.LUCENE_48, standardAnalyzer);
indexConfig.UseCompoundFile = true;
IndexWriter writer = new IndexWriter(indexDir, indexConfig);
//souce: https://github.com/apache/lucenenet/blob/Lucene.Net_4_8_0_beta00006/src/Lucene.Net/Search/SearcherFactory.cs
SearcherManager searcherManager = new SearcherManager(writer, applyAllDeletes: true, new SearchWarmer());
Document doc = new Document();
doc.Add(new StringField("examplePrimaryKey", "001", Field.Store.YES));
doc.Add(new TextField("exampleField", "Unique gifts are great gifts.", Field.Store.YES));
writer.AddDocument(doc);
doc = new Document();
doc.Add(new StringField("examplePrimaryKey", "002", Field.Store.YES));
doc.Add(new TextField("exampleField", "Everyone is gifted.", Field.Store.YES));
writer.AddDocument(doc);
doc = new Document();
doc.Add(new StringField("examplePrimaryKey", "003", Field.Store.YES));
doc.Add(new TextField("exampleField", "Gifts are meant to be shared.", Field.Store.YES));
writer.AddDocument(doc);
writer.Commit();
searcherManager.MaybeRefreshBlocking();
IndexSearcher indexSearcher = searcherManager.Acquire();
try {
QueryParser parser = new QueryParser(LuceneVersion.LUCENE_48, "exampleField", standardAnalyzer);
Query query = parser.Parse("everyone");
TopDocs topDocs = indexSearcher.Search(query, int.MaxValue);
int numMatchingDocs = topDocs.ScoreDocs.Length;
Assert.Equal(1, numMatchingDocs);
Document docRead = indexSearcher.Doc(topDocs.ScoreDocs[0].Doc);
string primaryKey = docRead.Get("examplePrimaryKey");
Assert.Equal("002", primaryKey);
} finally {
searcherManager.Release(indexSearcher);
}
}