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

: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パラメーターの値が正確になります。distinct uniqプラグインを使用するには、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