クエリの結果に特定の種類の大量のデータが含まれている場合、重複排除 (個別化) 機能を使用して、特定の列に基づいて結果セットを重複排除できます。特定の種類のデータは、返される結果に 1 回だけ表示され、結果の種類の多様性が確保されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化 を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成 および データの書き込み を参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成 を参照してください。
使用上の注意
重複排除機能を使用する場合、トークンではなく Offset パラメータと Limit パラメータを指定することによってのみページングを実行できます。
結果セットを集計し、同時に重複排除する場合、結果セットは重複排除される前に集計されます。
クエリ結果を重複排除する場合、返される結果の総数は Offset 値と Limit 値の合計によって決まります。最大 100,000 件の結果を返すことができます。
レスポンスの行の総数は、重複排除 (個別化) 機能を使用する前にクエリ条件を満たす行の数を示します。結果セットが重複排除された後、行の総数をクエリすることはできません。
パラメータ
パラメータ | 説明 |
TableName | データテーブルの名前。 |
IndexName | 検索インデックスの名前。 |
Query | クエリのタイプ。このパラメータには任意のクエリタイプを設定できます。 |
Collapse | 重複排除パラメータ。FieldName パラメータを含みます。 FieldName: 結果セットの重複排除の基準となる列の名前。値が INTEGER、FLOATING-POINT、KEYWORD データ型の列のみがサポートされています。 |
Offset | 現在のクエリが開始される位置。 |
Limit | 現在のクエリで返される最大行数。 特定のデータなしでクエリ条件を満たす行数のみをクエリするには、Limit パラメータを 0 に設定します。 |
サンプルコード
次のサンプルコードは、user_id の値が "00002" と一致する行をクエリし、product_name 列の値に基づいて結果セットを重複排除する方法の例を示しています。
func QueryWithCollapse(client *tablestore.TableStoreClient, tableName string, indexName string) {
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(tableName) // テーブルの名前を指定します。
searchRequest.SetIndexName(indexName) // 検索インデックスの名前を指定します。
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(&search.MatchQuery{ // クエリ条件を指定します。
FieldName: "user_id",
Text: "00002",
})
searchQuery.SetCollapse(&search.Collapse{
FieldName: "product_name", // product_name 列の値に基づいて結果セットを重複排除します。
})
searchQuery.SetOffset(0)
searchQuery.SetLimit(100)
searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{ReturnAll:true}) // クエリ条件を満たす行のすべての列を返します。
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest) // クエリを実行します。
if err != nil {
fmt.Println("Failed to search with error:", err)
return
}
for _, row := range searchResponse.Rows { // 返された行を表示します。
jsonBody, err := json.Marshal(row)
if err != nil {
panic(err)
}
fmt.Println("Row: ", string(jsonBody))
}
}
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。用語クエリ、複数用語クエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、地理クエリ、ブールクエリ、KNN ベクタークエリ、ネストされたクエリ、存在クエリ。検索インデックスによって提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
並べ替え機能とページング機能を使用して、クエリ条件を満たす行を並べ替えたりページングしたりできます。詳細については、並べ替えとページング を参照してください。
重複排除 (個別化) 機能を使用して、特定の列に基づいて結果セットを重複排除できます。このようにして、指定されたタイプのデータはクエリ結果に 1 回だけ表示されます。詳細については、重複排除 (個別化) を参照してください。
データテーブルのデータを分析する場合、Search オペレーションの集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計 および SQL クエリ を参照してください。
行を並べ替える必要なく、クエリ条件を満たすすべての行を取得する場合、ParallelScan オペレーションと ComputeSplits オペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンの実行 を参照してください。