web-dev-qa-db-ja.com

luceneでのBooleanClause.Occur.MustとBooleanClause.Occur.SHOULDの違い

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

32
Jagadesh

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

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

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

32
jpountz

例を使って説明しようと思います。

句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つでも満たすことができない場合、それはヒットにはなりません。

25
Logan

BooleanClause.Occur.Mustは必須句を表します。結果を返すには、条項を満たす必要があります。基本的にAND

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

3
androschuk.a

SHOULD句は、最も重要な懸念事項がRANKINGである場合、luceneで最も重要な機能です。

SHOULD句を使用すると、Luceneは取得したドキュメントをSHOULD句のポイントの合計によってランク付けします。したがって、(重要度に応じて)さまざまなブーストを使用してSHOULD句とクエリを結合できます。これは、SolrのExtendedDismaxQueryの背後にある概念です。

2
mhbashari