2016-04-05 10 views
1

Lucene.NETを使用して、一連の文書の内容を索引付けしています。私のインデックスにはいくつかのフィールドが含まれていますが、私は主に "コンテンツ"フィールドのクエリに関係しています。私は、要件を満たすために、クエリの作成だけでなく、索引付けの最良の方法を理解しようとしています。などLuceneで複数の語句を索引付けおよび検索する方法

、複数のキーワードを検索することが
  • 「飛行機は、自動車を訓練」(マイナス引用符):ここで

    は、現在の要件です。これにより、すべての用語を含むすべての文書が得られるはずですが、3つすべてを含む文書が最上部になければなりません。
  • 「航空機、列車、自動車」(引用符付き)などのフレーズを検索することができます。彼らがその順序で一緒だった場合にのみ一致します。
  • ストップワードについては、それらを完全に無視するか、それらを含めても問題ありません。
  • 句読点や特殊文字についても同様です。私はそれらを完全に無視するか、またはそれらを含めることができます。
  • 最後の2つは、必ずしも互いに一致する必要はなく、インデクサーと検索者がどのようにそれらを処理するかによって異なります。だから私は、ユーザーが「飛行機と電車」を検索しても、そのフレーズを含むドキュメントとは一致しないケースがあります。インデクサーが「と」を取り出したが、検索者がその特定のフレーズを検索する。

文書の中にはサイズが大きいものがありますので、Field.Storeをしたくないと思います。はい、そうですか?私たちが何をする必要があるのか​​をしなければならない限り。

答えて

3

リストに記載されている要件は、luceneの標準アナライザーとクエラーパーサーを使用してうまく処理する必要があります。 IndexWriterとQueryParserで同じアナライザーを使用してください。ストップワードは排除されます。ルールは、あなたがLucene demoを実行しようとした場合だけすべての句読点文字(あなたが詳細に興味があるなら、UAX #29, section 4を参照してください)

を無視して、あなたはそれだけで作品を見つける必要があることをもう少し関与しているものの句読点は、一般的に、無視されますここで指定したとおりです。

フィールドを格納する限り、そうです、はい。フィールドをインデックスから取得する必要がある場合は、フィールドを格納します。取得する必要のない大きなフィールドは保存する必要はありません。