Luceneを.netでどのように実行しますか?
質問
Luceneは優れた検索エンジンですが、.NETバージョンは公式のJavaリリースに遅れています(最新の安定した.NETリリースは2.0ですが、最新のJava Luceneバージョンは2.4であり、より多くの機能があります)。
どうやってこれを回避しますか?
解決
私が見つけた1つの方法は、驚くべきことでした。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は開発中で、現在3人のコミッターがいます
この方法でLucene 2.4をjarからdllに変換しましたが、「タイプまたは名前空間Luceneが見つかりませんでした」というエラーが表示されます。プロジェクトから古いdllを削除し、新しいDLLへの参照を追加しました。約2日かかり、最終的に最適化中にエラーが発生し、インデックスが更新できなくなったため、古いバージョンを削除したいです。 Lucene 2.4のインデックス作成速度は古いバージョンよりも何倍も速いことをどこかで読みました。SVNの2.3.1を使用した場合も高速になりますか?