collapse (distinct) 機能は、指定された列に基づいて検索結果を重複排除し、一意の値ごとに 1 件の結果を返すことで、返される結果の多様性を高めます。
前提条件
-
OTSClient インスタンスが初期化されています。詳細については、「OTSClient インスタンスの初期化」をご参照ください。
-
データテーブルが作成され、データが書き込まれています。詳細については、「データテーブルの作成」および「データの書き込み」をご参照ください。
-
データテーブルに対して検索インデックスが作成されます。詳細については、「検索インデックスを作成する」をご参照ください。
注意事項
-
collapse 機能は、Offset+Limit 方式によるページングのみをサポートします。トークン方式はサポートされていません。
-
集約と collapse 機能を結果セットに同時に適用する場合、集約は collapse 前の結果セットに対して実行されます。
-
collapse 機能を使用した場合、返されるグループの総数は Offset と Limit の合計値によって決定されます。返されるグループの最大数は 100,000 です。
-
返される行の総数は、collapse 前の一致行数を示します。collapse 後のグループ総数を取得することはできません。
パラメーター
|
パラメーター |
説明 |
|
TableName |
データテーブルの名前。 |
|
IndexName |
検索インデックスの名前。 |
|
Query |
任意のクエリタイプを指定できます。 |
|
Collapse |
collapse のパラメータ設定。FieldName を含みます。 FieldName:結果セットを折りたたむ対象となる列の名前。この機能は整数、浮動小数点数、キーワード型の列のみをサポートします。配列型の列はサポートされていません。 |
|
Offset |
クエリの開始位置。 |
|
Limit |
クエリで返されるアイテムの最大数。 データではなく行数のみが必要な場合は、Limit を 0 に設定してください。これにより、行は返されません。 |
使用例
次の例では、テーブル内のすべての行をクエリし、pk0 列に基づいて結果セットを collapse し、pk0 の一意の値ごとに 1 行のみを返します。
/// <summary>
/// pk0 列に基づいて結果セットを collapse します。
/// </summary>
/// <param name="otsClient"></param>
public static void UseCollapse(OTSClient otsClient)
{
MatchAllQuery matchAllQuery = new MatchAllQuery();
Collapse collapse = new Collapse();
collapse.FieldName = "pk0";
SearchQuery searchQuery = new SearchQuery();
searchQuery.Query = matchAllQuery;
searchQuery.Collapse = collapse;
SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
SearchResponse searchResponse = otsClient.Search(searchRequest);
foreach (Row row in searchResponse.Rows)
{
Console.WriteLine(JsonConvert.SerializeObject(row));
}
}
よくある質問
参考資料
多次元インデックスを使用してデータをクエリする際は、以下のクエリ方法を使用できます:完全一致検索、複数値完全一致検索、完全一致検索、一致検索、フレーズ一致検索、プレフィックス検索、範囲クエリ、ワイルドカード検索、ブール値クエリ、ジオクエリ、ネストされたクエリ、およびexists クエリ。ビジネス要件に応じて、さまざまなクエリ方法を組み合わせて多角的にデータをクエリできます。
クエリ条件を満たす行に対して、ソートおよびページング機能を使用して並べ替えやページ分割を行うことができます。詳細については、「ソートとページング」をご参照ください。
collapse (distinct) 機能を使用して、特定の列に基づいて結果セットを collapse できます。これにより、指定されたタイプのデータがクエリ結果に 1 回のみ表示されます。詳細については、「Collapse (distinct)」をご参照ください。
データテーブル内のデータを分析したい場合は、Search 操作の集約機能または SQL ステートメントを実行できます。たとえば、最小値、最大値、合計値、行数の合計などを取得できます。詳細については、「集約」および「SQL クエリ」をご参照ください。
行をソートせずにクエリ条件を満たすすべての行を取得したい場合は、ParallelScan 操作および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、「並列スキャン」をご参照ください。