【问题标题】:How do you run Lucene on .net?你如何在 .net 上运行 Lucene?
【发布时间】:2010-09-20 02:47:58
【问题描述】:

Lucene 是一个优秀的搜索引擎,但是 .NET 版本落后于 Java 官方版本(.NET 最新稳定版本是 2.0,而 Java Lucene 最新版本是 2.4,功能更多)。

你如何解决这个问题?

【问题讨论】:

  • 比我有更多荣誉的人应该将“lucence”编辑为lucene

标签: java .net search indexing lucene


【解决方案1】:

我发现一种令人惊讶的方法可以奏效:从 Java .jar 文件创建一个 .NET DLL!使用IKVM,您可以download Lucene,获取.jar 文件,然后运行:

ikvmc -target:library <path-to-lucene.jar>

生成一个像这样的 .NET dll:lucene-core-2.4.0.dll

然后您就可以从您的项目中引用此 DLL,一切顺利!您将需要一些 java 类型,因此还要参考 IKVM.OpenJDK.ClassLibrary.dll。你的代码可能有点像这样:

QueryParser parser = new QueryParser("field1", analyzer);
java.util.Map boosts = new java.util.HashMap();
boosts.put("field1", new java.lang.Float(1.0));
boosts.put("field2", new java.lang.Float(10.0));

MultiFieldQueryParser multiParser = new MultiFieldQueryParser
                      (new string[] { "field1", "field2" }, analyzer, boosts);
multiParser.setDefaultOperator(QueryParser.Operator.OR);

Query query = multiParser.parse("ABC");
Hits hits = isearcher.search(query);

我从来不知道您可以如此轻松地实现 Java 到 .NET 的互操作性。最好的部分是 C# 和 Java“几乎”源代码兼容(涉及 Lucene 示例)。只需将System.Out 替换为Console.Writeln :)。

=======

更新:在构建像 Lucene 荧光笔这样的库时,请确保您引用了核心程序集(否则您会收到有关缺少类的警告)。所以荧光笔是这样构建的:

ikvmc -target:library lucene-highlighter-2.4.0.jar -r:lucene-core-2.4.0.dll

【讨论】:

  • 这是我第一次学习IKVM。性能好吗?因为,原来java中的每条指令都需要经过两层VM,对吧? IKVM JVM,然后是 .NET CLR。搜索是您希望尽可能快的一件事。
  • 好问题。在这种情况下,我相信它实际上创建了一个直接运行且不被解释的 .NET dll。所以,lucene-core-2.4.0.dll 是通过 CLR 运行的。 IKVM 可能有其他模式,它在运行时解释可能很慢。
  • 从快速测试到我们的数据集等。我看不出 Lucene.NET 和 IKVMC 版本之间的性能差异。
  • 非常感谢..我不知道jar文件可以转换为.net dll
【解决方案2】:

下载源代码并构建它。我上周末才这样做,这很容易。完全没有问题。源代码为 2.3.1 版本。

我订阅了邮件列表,从中可以看出,Lucene.Net 正在积极开发中。

【讨论】:

  • 有趣——我还是更喜欢最新版本(考虑到它可以很容易地与 IKVM 一起移植),但感谢您的指点!
  • 貌似最新的开发版本是2.3,但最新的稳定版本是2.0.0.4。
  • 我正在使用我的应用程序 (BugTracker.NET) 发布 2.3,到目前为止没有任何投诉。
【解决方案3】:

Lucene.net 正在开发中,现在有三个提交者

【讨论】:

    【解决方案4】:

    我通过这种方式将 Lucene 2.4 从 jar 转换为 dll,但现在它给了我一个错误“找不到类型或命名空间 Lucene”。我从项目中删除了旧的 dll,并为新的 dll 添加了参考。我真的很想摆脱旧版本,因为它花了大约 2 天时间,最后在优化期间它给出了一些错误,现在索引不可更新:S。我在某处读到 Lucene 2.4 的索引速度比旧版本快很多倍,如果我使用 SVN 的 2.3.1 会更快吗?

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 2020-10-14
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多