BooleanQuery の lucene の BooleanClause.Occur.Must と BooleanClause.Occur.SHOULD の違いを例を挙げて説明できる人はいますか?
4 に答える
BooleanClause.Occur.SHOULD
は条項がオプションであるBooleanClause.Occur.Must
ことを意味し、条項が強制であることを意味します。
ただし、ブールクエリにオプションの句しかない場合、ドキュメントが結果に表示されるには、少なくとも 1 つの句が一致する必要があります。
BooleanQuery に一致するドキュメントをより適切に制御するために、minimumShouldMatchパラメータもあります。これにより、ドキュメントが結果に表示されるには、少なくともminimumShouldMatch
BooleanClause.Occur.SHOULD
句が一致する必要があることを Lucene に伝えることができます。
例を使用して説明します。
節 A と節 B の 2 つの節があるとします。ここで、BooleanClause.Occur の効果は次のようになります。
最初のケースでは、句 A と B の両方に BooleanClause.Occur.Should フラグが設定されています。これは、句の 1 つ (A または B) が満たされていても、ドキュメントがヒットすることを意味します。
2 番目のケースでは、節 A には BooleanClause.Occur.Must フラグが設定され、節 B には BooleanClause.Occur.Should フラグが設定されています。
この場合、ドキュメントが A 節を「満たす」場合にヒットとなります。このドキュメントが B 節を満たしているかどうかは、ヒットであることに影響しません。
しかし、ドキュメントが条項 A を満たさない場合、条項 B を満たしているかどうかに関係なく、ヒットにはなりません。
3 番目のケースでは、節 A と節 B の両方に BooleanClause.Occur.Must フラグが設定されています。
この場合、文書は「両方」の節を満たす場合にのみヒットします。1つでも満たさなければヒットにはなりません。
BooleanClause.Occur.Must
強制条項を表します。結果が返されるためには、句が満たされている必要があります。基本的にAND
。
BooleanClause.Occur.SHOULD
はオプションの句を表し、次のように動作しますOR