最初に知っておくべきことは、Lucene.NET は Lucene の行ごとのポートであることです。.NET に固有の部分はごくわずかであるため、Java Lucene に見られるほとんどのことは .NET バージョンにも当てはまります。これだけでも、Java プロジェクトを .NET に移植する方法について活発に議論するには十分な材料です。実際、このプロジェクトは何年にもわたるインキュベーションの後、本格的な Apache プロジェクトとして卒業したばかりです。
さて、私は Vedran に同意します。Lucene in Actionの本は、非常に迅速に理解できるようになるだけでなく (Lucene は迅速です)、問題の解決に役立つ悲惨な詳細を理解するのにも役立ちます。
オンライン素材から始めたい場合は、このイントロが手がかりになりそうです。10年近く経ちますが、ぱっと見ただけで、まだほとんど残っていると思います。C# に簡単に移植できる実際の Java コードを使用してデモンストレーションしながら、検索 (インデックス作成/クエリ) の両方の側面に対処します。
要するに、これらはハイライトです
- インデックスに書き込むには、IndexWriterを使用します
- インデックスをクエリするには、IndexSearcherでクエリを解放します
- ライターは、テキストの保存方法やインデックス作成方法を定義するアナライザー(デフォルトは StandardAnalyzer) を取ります。
- クエリを作成するには、QueryParser (Analyzer も必要) を使用するか、自分でクエリ オブジェクトを作成します。
この情報があれば、最小限の作業例を既にセットアップできます。
アナライザー
次のステップは、トークン化を掘り下げることです。異なるアナライザーは異なるトークン化を行います。短い単語を無視したり、英数字以外の文字で分割したり、ステミング (SnowballAnalyzer) を実行したりできます。利用可能なアナライザーを把握し、適切なアナライザーを選択することは、Lucene を問題に適合させるために不可欠です。
クエリ
索引付けされたデータは照会できます。柔軟な方法と言えますが、独自の制限があります。Lucene の性質上、否定、並べ替え、範囲などは大きな頭痛の種になる可能性があります。
1 つだけ理解しておく必要があるのは、Lucene は実際には、検索を実行できる非常に効率的な辞書に過ぎないということです。これは、たとえば、否定が独特である理由を説明しています。何かの不在を検索することはできませんが、「MyField:false」を検索することはできます。1 から 3 の間の数値を検索すると、通常、1、2、3 を検索するクエリが作成されます。また、日付を処理するときは、並べ替え可能な方法でインデックスが作成されていることを確認する必要があります (例: 20121005)。
コミュニティ
問題が発生した場合: Lucene.NET ニュースグループは非常に役に立ち、反応が良いことが示されています。
SOLR.NET
ファセットの必要性など、いくつかの制限に遭遇する可能性があります。SOLR.NETは Lucene.NET の上に構築されており、他の方法では非常に長い作業が必要になるいくつかの問題を解決します。実際に使ったことはありませんが。
診る
私も Examine の経験はありませんが、すぐにわかることから、クエリを手動で処理する負担が軽減されます。