一致フレーズクエリは、一致クエリと似ていますが、一致フレーズクエリはトークンの位置を評価する点が異なります。行がクエリ条件を満たすのは、行内のトークンの順序と位置が、キーワードに含まれるトークンの順序と位置に一致する場合のみです。クエリ対象の列のトークン化方式がファジートークン化の場合、一致フレーズクエリはワイルドカードクエリよりも低レイテンシで実行されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
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
関連情報
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。タームクエリ、複数タームクエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、地理クエリ、ブールクエリ、KNNベクトル検索クエリ、ネストされたクエリ、存在クエリ。検索インデックスで提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
並べ替えとページング機能を使用して、クエリ条件を満たす行を並べ替えたりページネーションしたりできます。詳細については、並べ替えとページングを参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブルのデータを分析する場合は、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計とSQL クエリを参照してください。
行を並べ替える必要なく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan 操作と ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンの実行を参照してください。