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

Tablestore:重複排除 (個別化)

最終更新日:Dec 28, 2024

クエリの結果に特定の種類の大量のデータが含まれている場合、重複排除 (個別化) 機能を使用して、特定の列に基づいて結果セットを重複排除できます。特定の種類のデータは、返される結果に 1 回だけ表示され、結果の種類の多様性が確保されます。

前提条件

使用上の注意

  • 重複排除機能を使用する場合、トークンではなく 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

参考資料