マッチクエリ (MatchQuery) を使用して、おおよその一致に基づいてテーブル内のデータをクエリできます。Tablestore は、TEXT 列の値と、指定したアナライザータイプに基づいてマッチクエリを実行するために使用するキーワードをトークン化します。これにより、Tablestore はトークンに基づいてマッチクエリを実行できます。あいまいなトークン化が使用される列には、あいまいクエリでの高パフォーマンスを確保するために、マッチフレーズクエリを使用することをお勧めします。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
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
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。タームクエリ、タームズクエリ、マッチオールクエリ、マッチクエリ、マッチフレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ジオクエリ、ブールクエリ、KNNベクトル検索クエリ、ネストされたクエリ、存在クエリ。検索インデックスによって提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
並べ替えおよびページング機能を使用して、クエリ条件を満たす行を並べ替えたりページネーションしたりできます。詳細については、並べ替えとページングを参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータはクエリ結果に1回だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブルのデータを分析する場合、Search オペレーションの集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値と最大値、合計、行の総数などを取得できます。詳細については、集計とSQL クエリを参照してください。
行を並べ替える必要なく、クエリ条件を満たすすべての行を取得する場合、ParallelScan および ComputeSplits オペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンの実行を参照してください。