このトピックでは、ネストクエリを実行して、ネストカラムの子行のデータをクエリする方法について説明します。ネストカラムをクエリする前に、NestedQuery 操作を使用してネストカラムをラップする必要があります。 NestedQuery 操作を呼び出すときは、任意のタイプのサブクエリとネストカラムのパスを指定する必要があります。
前提条件
OTSClient インスタンスが初期化されていること。 詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。 詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。 詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
パス | ネストカラムのパス。パスはツリー構造に似ています。 たとえば、news.title は、ネストタイプの news カラムの title サブカラムを示します。 |
クエリ | ネストカラムのサブカラムに対するクエリ。 クエリは任意のクエリタイプにすることができます。 |
ScoreMode | カラムに複数の値が含まれている場合に、スコアの計算に使用する値を指定します。 |
TableName | データテーブルの名前。 |
IndexName | 検索インデックスの名前。 |
ColumnsToGet | クエリ条件を満たす行のすべてのカラムを返すかどうかを指定します。 ReturnAll、Columns、および ReturnAllFromIndex パラメーターを指定できます。 ReturnAll のデフォルト値は false で、すべてのカラムが返されないことを指定します。 以下のいずれかの方法を使用して、返したいカラムを指定できます。 以下の方法を使用して返したいカラムを指定しない場合は、主キーカラムのみが返されます。
ReturnAll を true に設定すると、すべてのカラムが返されます。 |
例
次のサンプルコードは、col_nested カラムの nested_1 サブカラムの値が "tablestore" である行をクエリする方法を示しています。 検索インデックスのすべてのカラムが返されます。
/// <summary>
/// col1_nested.nested_1 カラムの値が "tablestore" である行をクエリします。 この例では、col1_nested カラムはネストカラムであり、nested_1 と nested_2 サブカラムが含まれています。
/// </summary>
/// <param name="otsClient"></param>
public static void NestedQuery(OTSClient otsClient)
{
var searchQuery = new SearchQuery();
// クエリ条件を満たす行の総数を返します。
searchQuery.GetTotalCount = true;
var nestedQuery = new NestedQuery();
nestedQuery.Path = "col1_nested"; // ネストカラムのパスを指定します。
TermQuery termQuery = new TermQuery("col1_nested.nested_1",new ColumnValue("tablestore"));// ネストクエリのサブクエリを構築します。
nestedQuery.Query = termQuery;
nestedQuery.ScoreMode = ScoreMode.None;
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
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。 タームクエリ、タームズクエリ、マッチオールクエリ、マッチクエリ、マッチフレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、ジオクエリ、ネストクエリ、存在クエリ。ビジネス要件に基づいて、さまざまなクエリメソッドを使用して複数のディメンションからデータをクエリできます。
ソート機能とページング機能を使用して、クエリ条件を満たす行をソートまたはページネーションできます。 詳細については、ソートとページングを参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。 これにより、指定されたタイプのデータはクエリ結果に 1 回だけ表示されます。 詳細については、折りたたみ(重複排除)を参照してください。
データテーブルのデータを分析する場合は、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。 たとえば、最小値、最大値、合計、行の総数などを取得できます。 詳細については、集計とSQL クエリを参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan 操作と ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。 詳細については、並列スキャンを参照してください。