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