マッチフレーズクエリはマッチクエリに似ていますが、マッチフレーズクエリはトークンの位置を評価する点が異なります。行がクエリ条件を満たすのは、行内のトークンの順序と位置が、キーワードに含まれるトークンの順序と位置に一致する場合のみです。クエリ対象の列のトークン化方式がファジートークン化の場合、マッチフレーズクエリはワイルドカードクエリよりも低いレイテンシで実行されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化するをご参照ください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルを作成するおよびデータを書き込むをご参照ください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスを作成するをご参照ください。
パラメータ
パラメータ | 説明 |
FieldName | クエリ対象の列の名前。 列のタイプは TEXT にすることができます。 |
Text | マッチフレーズクエリを実行するときに列の値と照合するために使用されるキーワード。 クエリ対象の列のタイプが TEXT の場合、キーワードは、検索インデックスの作成時に指定したアナライザータイプに基づいて複数のトークンにトークン化されます。検索インデックスの作成時にアナライザータイプを指定しない場合、デフォルトでは単一単語のトークン化が実行されます。 たとえば、「this is」というフレーズを使用してマッチフレーズクエリを実行すると、「...、this is tablestore」や「this is a table」などのクエリ結果が返されます。「this table is ...」や「is this a table」は返されません。 |
Query | クエリのタイプ。このパラメータを MatchPhraseQuery に設定します。 |
TableName | データテーブルの名前。 |
IndexName | 検索インデックスの名前。 |
GetTotalCount | クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値: false。これは、クエリ条件を満たす行の総数が返されないことを示します。 このパラメータを true に設定すると、クエリのパフォーマンスが低下します。 |
ColumnsToGet | クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、および ReturnAllFromIndex パラメータを指定できます。 ReturnAll のデフォルト値は false で、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返したい列を指定できます。次の方法を使用して返したい列を指定しない場合、主キー列のみが返されます。
ReturnAll を true に設定すると、すべての列が返されます。 |
例
次のサンプルコードは、データテーブル内の Text_type_col 列の値が「Tablestore SearchIndex」と一致する行をクエリする方法を示しています。
/// <summary>
/// データテーブル内の Text_type_col 列の値が "Tablestore SearchIndex" と一致する行をクエリし、クエリ条件を満たす行の総数を返します。
/// </summary>
/// <param name="otsClient"></param>
public static void MatchPhraseQuery(OTSClient otsClient)
{
var searchQuery = new SearchQuery();
// クエリタイプを MatchPhraseQuery に設定します。
searchQuery.Query = new MatchPhraseQuery("Text_type_col", "Tablestore SearchIndex");
// クエリ条件を満たす行の総数を返します。
searchQuery.GetTotalCount = true;
var request = new SearchRequest(TableName, IndexName, searchQuery);
// ColumnsToGet パラメータを設定して、返す列を指定したり、すべての列を返すように指定したり、検索インデックス内のすべての列を返すように指定したりできます。このパラメータを設定しない場合、主キー列のみが返されます。
request.ColumnsToGet = new ColumnsToGet()
{
// 検索インデックス内のすべての列を返します。
ReturnAllFromIndex = true
// 指定した列を返します。
//Columns = new List<string>() { Long_type_col, Text_type_col, Keyword_type_col }
// クエリ条件を満たす行のすべての列を返します。
//ReturnAll = true
};
var response = otsClient.Search(request);
Console.WriteLine("Total Count:" + response.TotalCount); // 返された行数ではなく、クエリ条件を満たす行の総数を表示します。
}
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます:タームクエリ、タームズクエリ、マッチオールクエリ、マッチクエリ、マッチフレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、ジオクエリ、ネストされたクエリ、存在クエリ。ビジネス要件に基づいて、さまざまなクエリメソッドを使用して複数のディメンションからデータをクエリできます。
並べ替え機能とページング機能を使用して、クエリ条件を満たす行を並べ替えたりページ分割したりできます。詳細については、並べ替えとページングをご参照ください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)をご参照ください。
データテーブルのデータを分析する場合、Searchオペレーションの集計機能を使用するか、SQLステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計およびSQLクエリをご参照ください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合、ParallelScanオペレーションとComputeSplitsオペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンをご参照ください。