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 に変換しましたが、「Type or namespace Lucene could not be found」というエラーが表示されます。プロジェクトから古い dll を削除し、新しい dll への参照を追加しました。約2日かかり、最終的に最適化中にエラーが発生し、インデックスが更新できなくなったため、古いバージョンを本当に削除したいと思います:S. Lucene 2.4 のインデックス作成速度は古いバージョンよりも何倍も高速であるとどこかで読みましたが、SVN の 2.3.1 を使用すると、それも高速になりますか?