2008-10-31 30 views
9

Lucene是一个优秀的搜索引擎,但是.NET版本落后于官方Java版本(最新的稳定.NET版本是2.0,但最新的Java Lucene版本是2.4,它具有更多的功能)。你如何在.net上运行Lucene?

你如何解决这个问题?

+0

有人比我更多的荣誉应该编辑lucene的“lucence” – friism 2008-11-06 15:37:14

+0

只需修复它:) – Kalid 2008-11-18 19:48:27

回答

20

我发现的一种方式,很惊讶可以工作:从Java .jar文件创建一个.NET DLL!使用IKVM可以download Lucene,得到.jar文件,并运行:

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

产生一个NET的DLL是这样的:Lucene的核心 - 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示例中)。只需用Console.Writeln :)替换System.Out即可。

=======

更新:当建立像Lucene的荧光笔库,请确保您引用的核心组件(不然你会错过类的警告)。因此,荧光笔是这样构建的:

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

这是我第一次学习IKVM。性能好吗?因为,原始java中的每条指令都需要经过两层虚拟机,对吧? IKVM JVM和.NET CLR。搜索是你想尽可能快的一件事。 – 2008-11-03 01:42:30

1

下载源代码并构建它。我上个周末做了这个,很简单。没有问题。源代码版本为2.3.1。

我订阅了邮件列表,从它判断,Lucene.Net正在积极开发。

1

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

0

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

相关问题