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

Tablestore:一致フレーズクエリ

最終更新日:Dec 28, 2024

一致フレーズクエリは、一致クエリと似ていますが、一致フレーズクエリはトークンの位置を評価する点が異なります。行がクエリ条件を満たすのは、行内のトークンの順序と位置が、キーワードに含まれるトークンの順序と位置に一致する場合のみです。クエリ対象の列のトークン化方式がファジートークン化の場合、一致フレーズクエリはワイルドカードクエリよりも低レイテンシで実行されます。

前提条件

パラメーター

パラメーター

説明

TableName

データテーブルの名前。

IndexName

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

Query

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

FieldName

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

TEXT 列で一致フレーズクエリを実行できます。

Text

一致フレーズクエリを実行するときに、列値と一致させるために使用するキーワード。

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

たとえば、「this is」というフレーズを使用して一致フレーズクエリを実行すると、「...、this is tablestore」と「this is a table」が返されます。「this table is ...」や「is this a table」は返されません。

Offset

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

Limit

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

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

GetTotalCount

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

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

ColumnsToGet

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

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

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

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

サンプルコード

次のサンプルコードは、データテーブル内の Col_Text 列の値がフレーズ全体「hangzhou shanghai」に順番に一致する行をクエリする方法の例を示しています。

/**
 * テーブル内の Col_Text 列の値がフレーズ全体 "hangzhou shanghai" に順番に一致する行をクエリします。Tablestore は、クエリ条件を満たす行の総数と、一致した行の一部を返します。
 */
func MatchPhraseQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)
    query := &search.MatchPhraseQuery{} // クエリタイプを MatchPhraseQuery に設定します。
    query.FieldName = "Col_Text"  // クエリ対象の列の名前を指定します。
    query.Text = "hangzhou shanghai"  // 列の値と一致させるキーワードを指定します。
    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))
    }
    // クエリ条件を満たす行のすべての列を返します。
    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

関連情報