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

Tablestore:マッチクエリ

最終更新日:Dec 28, 2024

マッチクエリ (MatchQuery) を使用して、おおよその一致に基づいてテーブル内のデータをクエリできます。Tablestore は、TEXT 列の値と、指定したアナライザータイプに基づいてマッチクエリを実行するために使用するキーワードをトークン化します。これにより、Tablestore はトークンに基づいてマッチクエリを実行できます。あいまいなトークン化が使用される列には、あいまいクエリでの高パフォーマンスを確保するために、マッチフレーズクエリを使用することをお勧めします。

前提条件

パラメーター

パラメーター

説明

TableName

データテーブルの名前。

IndexName

検索インデックスの名前。

Query

クエリのタイプ。クエリタイプを MatchQuery に設定します。

FieldName

一致させるフィールドの名前。

TEXT 列でマッチクエリを実行できます。

Text

マッチクエリを実行するときに列値と一致させるために使用されるキーワード。

マッチクエリに使用される列のタイプが TEXT の場合、キーワードは、検索インデックスの作成時に指定したアナライザーに基づいて複数のキーワードにトークン化されます。検索インデックスの作成時にアナライザーを指定しない場合、デフォルトでは単一単語のトークン化が実行されます。

たとえば、一致させる列が TEXT 列で、アナライザータイプを単一単語のトークン化に設定し、「this is」を検索キーワードとして使用すると、「..., this is tablestore」、「is this tablestore」、「tablestore is cool」、「this」、および「is」などのクエリ結果を取得できます。

Operator

論理演算子。デフォルトでは、OR 論理演算子が使用されます。これは、列の値に指定された数のトークンが含まれている場合、行がクエリ条件を満たすことを示します。

Operator パラメーターを AND に設定すると、列の値にすべてのトークンが含まれている場合にのみ、行はクエリ条件を満たします。

MinimumShouldMatch

列値に含まれる一致するトークンの最小数。

行の FieldName パラメーターで指定された列の値に、少なくとも最小数の一致するトークンが含まれている場合にのみ、行が返されます。

説明

MinimumShouldMatch パラメーターは、OR 論理演算子と一緒に使用する必要があります。

Offset

現在のクエリが開始される位置。

Limit

現在のクエリで返す行の最大数。

特定のデータなしでクエリ条件を満たす行の数のみをクエリするには、Limit パラメーターを 0 に設定します。

GetTotalCount

クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。

このパラメーターを true に設定すると、クエリのパフォーマンスが低下します。

ColumnsToGet

クエリ条件を満たす各行のすべての列を返すかどうかを指定します。ReturnAll パラメーターと Columns パラメーターを指定できます。

デフォルトでは、ReturnAll パラメーターは false に設定されています。これは、すべての列が返されるわけではないことを示します。ReturnAll パラメーターが false に設定されている場合、Columns パラメーターを使用して返す列を指定できます。Columns パラメーターを指定しない場合、プライマリキー列のみが返されます。

ReturnAll を true に設定すると、すべての列が返されます。

サンプルコード

次のサンプルコードは、Col_Keyword の値が 'hangzhou' と一致する行をクエリする方法の例を示しています。

/**
 * テーブル内の Col_Keyword の値が "hangzhou" と一致する行をクエリします。Tablestore は、クエリ条件を満たす行の総数と、一致する行の一部を返します。
 */
func MatchQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)
    query := &search.MatchQuery{} // クエリタイプを MatchQuery に設定します。
    query.FieldName = "Col_Keyword" // クエリする列の名前を指定します。
    query.Text = "hangzhou" // 列の値と一致させるキーワードを指定します。
    searchQuery := search.NewSearchQuery()
    searchQuery.SetQuery(query)
    searchQuery.SetGetTotalCount(true) 
    searchQuery.SetOffset(0) // Offset パラメーターを 0 に設定します。
    searchQuery.SetLimit(20) // Limit パラメーターを 20 に設定します。これは、最大 20 行が返されることを示します。
    searchRequest.SetSearchQuery(searchQuery)
    searchResponse, err := client.Search(searchRequest)
    if err != nil { // エラーが発生しました。
        fmt.Printf("%#v", err)
        return
    }
    fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // クエリ条件を満たすすべての行が返されたかどうかを確認します。
    fmt.Println("TotalCount: ", searchResponse.TotalCount) // クエリ条件を満たす行の総数を表示します。
    fmt.Println("RowCount: ", len(searchResponse.Rows)) // 返された行の総数を表示します。
    for _, row := range searchResponse.Rows {
        jsonBody, err := json.Marshal(row)
        if err != nil {
            panic(err)
        }
        fmt.Println("Row: ", string(jsonBody)) // デフォルトでは、columnsToGet パラメーターを指定しない場合、プライマリキー列のみが返されます。
    }
    // クエリ条件を満たす行のすべての列を返します。
    searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
        ReturnAll:true,
    })
    searchResponse, err = client.Search(searchRequest)
    if err != nil {
        fmt.Printf("%#v", err)
        return
    }
    fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // クエリ条件を満たすすべての行が返されたかどうかを確認します。
    fmt.Println("TotalCount: ", searchResponse.TotalCount) // クエリ条件を満たす行の総数を表示します。
    fmt.Println("RowCount: ", len(searchResponse.Rows))
    for _, row := range searchResponse.Rows {
        jsonBody, err := json.Marshal(row)
        if err != nil {
            panic(err)
        }
        fmt.Println("Row: ", string(jsonBody))
    }
}

FAQ

参考資料