ユーザーがLucene3.5で複数のフィールドを検索できるようにするために、現在、検索する各フィールドのQueryParserを作成してDisjunctionMaxQueryに追加しています。これは、デフォルトの演算子としてORを使用する場合にうまく機能しますが、より正確な(そしてより少ない)結果を得るために、デフォルトの演算子をANDに変更したいと思います。
問題は、queryParser.setDefaultOperator(QueryParser.AND_OPERATOR)
すべての用語が少なくとも1つのフィールドに含まれている必要があるため、多くのドキュメントを見逃すことです。
たとえば、ドキュメントの次のデータについて考えてみます。titleフィールド= "Programming Languages"、bodyフィールド= "Java、C ++、PHP"。ユーザーがJavaプログラミングを検索した場合、この特定のドキュメントは結果に含まれません。これは、タイトルまたは本文フィールドにクエリ内のすべての用語が含まれているためです。上記のクエリではこのドキュメントを返したいのですが、HTMLプログラミングのクエリでは返しません。
キャッチオールフィールドを検討しましたが、いくつか問題があります。まず、ユーザーはクエリ(author:bill)にフィールドごとの用語を含めることがよくありますが、これはキャッチオールフィールドでは不可能です。また、FastVectorHighlighterを使用して特定のフィールドを強調表示します。これには、インデックスを付けて保存する必要があります。したがって、キャッチオールフィールドを追加すると、同じデータのほとんどを2回インデックス付けする必要があり、時間とスペースが消費されます。
何か案は?