一致クエリを使用すると、おおよその一致に基づいてテーブル内のデータをクエリできます。Tablestoreは、TEXT型の列の値と、指定したアナライザーに基づいて一致クエリを実行するために使用するキーワードをトークン化します。そのため、Tablestoreはトークンに基づいて一致クエリを実行できます。高性能なあいまいクエリを実現するために、あいまいトークン化が使用されている列に対しては、MatchPhraseQueryオペレーションを呼び出して一致フレーズクエリを実行することをお勧めします。
前提条件
OTSClientインスタンスが初期化されていること。詳細については、OTSClientインスタンスを初期化するを参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルを作成するおよびデータを書き込むを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスを作成するを参照してください。
パラメーター
パラメーター | 説明 |
FieldName | クエリ対象の列の名前。 列はTEXT型である必要があります。 |
Text | 一致クエリを実行する際に列の値と一致させるキーワード。 クエリ対象の列がTEXT型の場合、キーワードは、検索インデックスの作成時に指定したアナライザーのタイプに基づいて複数のトークンにトークン化されます。検索インデックスの作成時にアナライザーのタイプを指定しない場合、デフォルトでは単一単語トークン化が実行されます。 たとえば、クエリ対象の列がTEXT型で、アナライザーのタイプが単一単語トークン化の場合、「this is」というフレーズを使用して一致クエリを実行すると、「..., this is tablestore」、「is this tablestore」、「tablestore is cool」、「this」、「is」などのクエリ結果が返されます。 |
Query | クエリのタイプ。このパラメーターをMatchQueryに設定します。 |
Operator | 論理演算子。デフォルトでは、ORが論理演算子として使用されます。これは、列の値に少なくとも最小数のトークンが含まれている場合、行がクエリ条件を満たすことを指定します。 演算子をANDに設定すると、列の値にすべてのトークンが含まれている場合にのみ、行はクエリ条件を満たします。 |
MinimumShouldMatch | 列の値に含まれる一致するトークンの最小数。 行のクエリ対象の列の値に、少なくとも最小数の一致するトークンが含まれている場合にのみ、行が返されます。 説明 MinimumShouldMatchパラメーターは、OR論理演算子と組み合わせて使用する必要があります。 |
TableName | データテーブルの名前。 |
IndexName | 検索インデックスの名前。 |
GetTotalCount | クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。これは、クエリ条件を満たす行の総数が返されないことを示します。 このパラメーターをtrueに設定すると、クエリのパフォーマンスが低下します。 |
ColumnsToGet | クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、ReturnAllFromIndexパラメーターを指定できます。 ReturnAllのデフォルト値はfalseです。これは、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返す列を指定できます。次の方法を使用して返す列を指定しない場合、主キー列のみが返されます。
ReturnAllをtrueに設定すると、すべての列が返されます。 |
例
次のサンプルコードは、データテーブル内のText_type_col列の値が「SearchIndex」と一致する行をクエリする方法を示しています。
/// <summary>
/// テーブル内のText_type_col列の値が"SearchIndex"と一致する行をクエリし、クエリ条件を満たす行の総数を返します。
/// </summary>
/// <param name="otsClient"></param>
public static void MatchQuery(OTSClient otsClient)
{
var searchQuery = new SearchQuery();
// クエリタイプをMatchQueryに設定し、一致させる列をText_type_colに、キーワードを"SearchIndex"に設定します。
searchQuery.Query = new MatchQuery("Text_type_col", "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オペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。