【问题标题】:Getting exception while creating Lucene indexer using DotNetRDf.Query.FullText使用 DotNetRDf.Query.FullText 创建 Lucene 索引器时出现异常
【发布时间】:2020-12-22 05:28:01
【问题描述】:

您好,我正在尝试在 .Net core 3.1 中使用 DotNetRDf.Query.FullText 来创建 Lucene 索引器,但遇到运行时异常。你能帮忙解决这个问题吗?

System.TypeLoadException HResult=0x80131522 消息=无法加载 从程序集“Lucene.Net,版本=4.0.0.0”中输入“MaxFieldLength”, 文化=中性,PublicKeyToken=85089178b9ac3181'。

示例代码:

var indexer = new LuceneObjectsIndexer(new RAMDirectory(), new StandardAnalyzer(LuceneVersion), new DefaultIndexSchema());

使用的包版本: DotNetRDF - 2.1.6 Lucene - 4.8.0-beta00013

【问题讨论】:

  • 您能否提供此异常的完整堆栈跟踪?

标签: .net-core jena lucene.net fuseki dotnetrdf


【解决方案1】:

这似乎有些奇怪。 Lucene.net 3.x 有一个 MaxFieldLength 类型,可以在 IndexWriter 构造函数中传递,但 Lucene.net 4.X 没有这样的类型,它的 IndexWriter 类没有接受这样一个参数的构造函数。

查看 Lucene.net 3.03 ImageWriter class 并将其与 Lucene.net 4.8 ImageWriter class 进行比较

所以感觉 DotNetRdf 库可能已被编写为依赖于 ImageWriter 构造函数,该构造函数仅在 Lucene 的 3.X 版本中可用。如果您显示完整的堆栈跟踪,可能有助于更清楚地了解情况。

查看dotnetrdf.org 站点,我没有看到他们在哪里记录了他们使用的Lucene 版本,但这个错误表明该库是为Lucene.Net 3.x 设计的。我建议尝试使用 Lucene.Net 3.03 Nuget packages 而不是 4.8 beta 包,看看是否能解决您的问题。

【讨论】:

  • 我是 dotNetRDF 的维护者之一,我可以确认 Ron 是正确的,当前版本的 dotNetRDF 使用 Lucene.net 3.0.3。我创建了this ticket 来跟踪所需的工作。欢迎任何支持/ PR!
  • 尝试使用包版本:DotNetRDF - 2.1.6 Lucene - 3.0.3 但得到相同的错误。堆栈跟踪 - 在 VDS.RDF.Query.FullText.Indexing.Lucene.LuceneSubjectsIndexer..ctor 的 VDS.RDF.Query.FullText.Indexing.Lucene.BaseSimpleLuceneIndexer..ctor(目录 indexDir,分析器分析器,IFullTextIndexSchema 架构,IndexingMode 模式) (目录 indexDir、Analyzer 分析器、IFullTextIndexSchema 架构)
  • 很难相信使用 Lucene 3.0.3 会得到相同的异常,因为它肯定声明了 MaxFieldLength 类型。为了验证它是否有效,我使用 Visual Studio 16.8.3 创建了一个 Web 应用程序、完整的框架 4.61、mvc,并通过 nuget 安装了 dotNetRDf 2.6.1(不是 2.1.6 的最新版本),并自动安装了 Lucene 3.0。 3 作为依赖项,我不需要单独执行此操作。然后,我使用 Lucene.Net.Util.Version.LUCENE_30 作为LuceneVersion 执行您在问题中指定的代码行并运行代码。它没有问题。我可以通过电子邮件向您发送项目的 zip。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 2019-01-30
  • 2023-03-23
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多