38

BooleanQuery の lucene の BooleanClause.Occur.Must と BooleanClause.Occur.SHOULD の違いを例を挙げて説明できる人はいますか?

4

4 に答える 4

42

BooleanClause.Occur.SHOULDは条項がオプションであるBooleanClause.Occur.Mustことを意味し、条項が強制であることを意味します。

ただし、ブールクエリにオプションの句しかない場合、ドキュメントが結果に表示されるには、少なくとも 1 つの句が一致する必要があります。

BooleanQuery に一致するドキュメントをより適切に制御するために、minimumShouldMatchパラメータもあります。これにより、ドキュメントが結果に表示されるには、少なくともminimumShouldMatch BooleanClause.Occur.SHOULD句が一致する必要があることを Lucene に伝えることができます。

于 2012-04-12T12:08:26.193 に答える
30

例を使用して説明します。

節 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つでも満たさなければヒットにはなりません。

于 2012-08-03T09:47:03.383 に答える
5

BooleanClause.Occur.Must強制条項を表します。結果が返されるためには、句が満たされている必要があります。基本的にAND

BooleanClause.Occur.SHOULDはオプションの句を表し、次のように動作しますOR

于 2016-08-15T12:05:01.873 に答える