Lucene 是一个优秀的搜索引擎,但是 .NET 版本落后于官方 Java 版本(.NET 最新的稳定版本是 2.0,但是最新的 Java Lucene 版本是 2.4,它有更多的功能)。
你如何解决这个问题?
我发现的一种令人惊讶的方法可能会奏效:从 Java .jar 文件创建一个 .NET DLL!使用IKVM,您可以下载 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
下载源代码并构建它。我上周末才这样做,这很容易。完全没有问题。源代码为 2.3.1 版本。
我订阅了邮件列表,从中判断,Lucene.Net 正在积极开发中。
Lucene.net 正在开发中,现在有三个提交者
我通过这种方式将 Lucene 2.4 从 jar 转换为 dll,但现在它给了我一个错误“找不到类型或命名空间 Lucene”。我从项目中删除了旧的 dll,并为新的 dll 添加了参考。我真的很想摆脱旧版本,因为它花了大约 2 天时间,最后在优化过程中出现了一些错误,现在索引不可更新:S。我在某处读到 Lucene 2.4 的索引速度比旧版本快很多倍,如果我使用 SVN 的 2.3.1 会更快吗?