すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:distinct 句

最終更新日:Dec 28, 2024

distinct 句を使用すると、多様な結果を得ることができます。これにより、ユーザーエクスペリエンスが向上します。たとえば、クエリで多数のドキュメントが取得されたとします。特定のユーザーの複数のドキュメントのスコアが高く、上位にランク付けされている場合、同じページに表示される結果のほとんどが同じユーザーからのものになります。これは表示効果とユーザーエクスペリエンスに影響します。この場合、distinct 句を使用して各ユーザーからドキュメントを抽出することで、各ユーザーのドキュメントを表示できます。

構文

dist_key:field,dist_count:1,dist_times:1,reserved:false.

パラメーター

タイプ

必須

有効な値

デフォルト値

説明

dist_key

string

はい

分散対象のフィールド。

dist_times

int

いいえ

1

抽出回数。

dist_count

int

いいえ

1

1 回の抽出で抽出するドキュメントの数。

reserved

true/false

いいえ

true/false

true

抽出後に残りのドキュメントを保持するかどうかを指定します。このパラメーターを false に設定すると、残りのドキュメントは破棄されます。その結果、一致する結果の総数は不正確になります。

update_total_hit

true/false

いいえ

true/false

false

reserved パラメーターの値を false に設定し、update_total_hit パラメーターの値を true に設定すると、システムは破棄されたドキュメントの数と total_hit パラメーターの値の差を計算します。total_hit レスポンスパラメーターの値は不正確な場合があります。 update_total_hit パラメーターの値を false に設定すると、total_hit パラメーターの値には破棄されたドキュメントの数が含まれます。

dist_filter

string

いいえ

フィルター条件。除外されたドキュメントは分散されず、分散されたドキュメントの最初のグループと一緒にソートされます。デフォルトでは、すべてのドキュメントが分散されます。

grade

float

いいえ

ドキュメントを異なるカテゴリに分類するためのしきい値。すべてのドキュメントは、指定されたしきい値に基づいて異なるカテゴリに分類されます。各カテゴリのドキュメントは、distinct 句のパラメーターに基づいて分散されます。 grade パラメーターはオプションです。 grade パラメーターを設定しない場合、デフォルトですべてのドキュメントが 1 つのカテゴリに分類されます。ドキュメントは、指定されたしきい値に基づいて分類されます。縦棒(|)でしきい値を区切ります。指定できるしきい値の数に制限はありません。例 1: grade:3.0。この場合、ドキュメントは指定されたしきい値に基づいて 2 つのカテゴリに分類されます。スコアが 3.0 未満のドキュメントは最初のカテゴリに分類されます。スコアが 3.0 以上のドキュメントは 2 番目のカテゴリに分類されます。例 2: grade:3.0|5.0。この場合、ドキュメントは 3 つのカテゴリに分類されます。スコアが 3.0 未満のドキュメントは最初のカテゴリに分類されます。スコアが 3.0 以上 5.0 未満のドキュメントは 2 番目のカテゴリに分類されます。スコアが 5.0 以上のドキュメントは 3 番目のカテゴリに分類されます。カテゴリは、最初のカテゴリのドキュメントのソートに使用されるのと同じ順序でソートされます。最初のカテゴリのドキュメントが降順でソートされている場合、カテゴリは降順でソートされます。これは逆の場合も同様です。

dist_count パラメーターと dist_times パラメーターの説明

次の例では、dist_count パラメーターと dist_times パラメーターの使用方法と意味について説明します。6 つのドキュメントが提供されています。 id はプライマリキーフィールド、name は分散対象のフィールドです。

doc1: id:11 name:a

doc2: id:22 name:a

doc3: id:33 name:a

doc4: id:44 name:b

doc5: id:55 name:c

doc6: id:66 name:c

例 1: distinct=dist_key:name,dist_count:2,dist_times:1,reserved:false。この例では、1 回の抽出が実行され、2 つのドキュメントが抽出されます。分散後の結果は doc1、doc2、doc4、doc5、doc6 です。

例 2: distinct=dist_key:name,dist_count:1,dist_times:2,reserved:false。この例では、2 回の抽出が実行されます。各抽出で 1 つのドキュメントが抽出されます。分散後の結果は doc1、doc4、doc5、doc2、doc6 です。

例 3: distinct=dist_key:name,dist_count:1,dist_times:1,reserved:false。この例では、1 回の抽出が実行され、1 つのドキュメントが抽出されます。分散後の結果は doc1、doc4、doc5 です。

使用上の注意

  1. distinct 句はオプションです。

  2. distinct 句で参照されるフィールドは、アプリケーションスキーマを定義するときに属性フィールドとして設定する必要があります。

  3. distinct 句では ARRAY タイプのフィールドを指定できません。 INT タイプと LITERAL タイプのフィールドのみがサポートされています。

  4. 分散対象のフィールドは 1 つだけ指定できます。

  5. ソート機能では重複を自動的に削除することはできません。ただし、distinct 句を使用して重複を削除できます。たとえば、同じタイトルのドキュメントを重複排除する場合、タイトルを分散対象のフィールドとして指定し、1 回の抽出を実行できます。抽出では、1 つのドキュメントが抽出されます。

distinct uniq プラグイン

reserved パラメーターが false に設定されている場合、検索結果に関連する total パラメーターと viewtotal パラメーターの値は不正確です。この場合、これらの値に基づいてページネーションを実装したり、その他の処理を実行したりすると、エラーが発生する可能性があります。この問題を解決するために、OpenSearch は distinct uniq プラグインを提供して、dist_times、dist_count、および reserved パラメーターが 1、1、および false に設定されている場合に total パラメーターと viewtotal パラメーターの値が正確であることを保証します。 kvpairs 句に duniqfield:field を追加します。例: kvpairs=duniqfield:name

注記

  • field パラメーターの値は、distinct 句の dist_key パラメーターの値と同じである必要があります。

  • このプラグインは、dist_times、dist_count、および reserved パラメーターが 1、1、および false に設定されている場合にのみ機能します。これらのパラメーターの値が変更された場合、このプラグインは機能しません。

  • パフォーマンス上の理由から、このプラグインは、5,000 件を超える検索結果が取得された場合でも、各クエリで最大 5,000 件の検索結果を返します。

  • このプラグインを数百万のデータレコードにヒットするクエリで使用すると、タイムアウトが発生する可能性があります。

  1. create_time パラメーターの値が 1402301230 より大きく、「浙江大学」が含まれているドキュメントを検索します。取得されたドキュメントは company_id フィールドに基づいて分散されます。合計 10 回の抽出が実行されます。各抽出で 2 つのドキュメントが抽出されます。抽出されたドキュメントは最後にランク付けされます。

    query=default:'浙江大学'&&filter=create_time>1402301230&&distinct=dist_key:company_id,dist_count:2,dist_times:10
  2. 「浙江大学」が含まれているドキュメントを検索します。取得されたドキュメントは company_id フィールドに基づいて分散されます。1 回の抽出が実行され、1 つのドキュメントが抽出されます。抽出後の残りのドキュメントは破棄され、抽出されたドキュメントのみが返されます。

    query=default:'浙江大学'&&distinct=dist_key:company_id,dist_count:1,dist_times:1,reserved:false&&kvpairs=duniqfield:company_id