すべてのプロダクト
Search
ドキュメントセンター

Tablestore:ネストクエリの実行

最終更新日:Dec 28, 2024

このトピックでは、ネストクエリを実行して、ネストカラムの子行のデータをクエリする方法について説明します。ネストカラムをクエリする前に、NestedQuery 操作を使用してネストカラムをラップする必要があります。 NestedQuery 操作を呼び出すときは、任意のタイプのサブクエリとネストカラムのパスを指定する必要があります。

前提条件

パラメーター

パラメーター

説明

パス

ネストカラムのパス。パスはツリー構造に似ています。 たとえば、news.title は、ネストタイプの news カラムの title サブカラムを示します。

クエリ

ネストカラムのサブカラムに対するクエリ。 クエリは任意のクエリタイプにすることができます。

ScoreMode

カラムに複数の値が含まれている場合に、スコアの計算に使用する値を指定します。

TableName

データテーブルの名前。

IndexName

検索インデックスの名前。

ColumnsToGet

クエリ条件を満たす行のすべてのカラムを返すかどうかを指定します。 ReturnAll、Columns、および ReturnAllFromIndex パラメーターを指定できます。

ReturnAll のデフォルト値は false で、すべてのカラムが返されないことを指定します。 以下のいずれかの方法を使用して、返したいカラムを指定できます。 以下の方法を使用して返したいカラムを指定しない場合は、主キーカラムのみが返されます。

  • Columns を設定して、返したいカラムを指定します。

  • ReturnAllFromIndex を true に設定して、検索インデックスからすべてのカラムを返します。

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 操作を呼び出して並列スキャン機能を使用できます。 詳細については、並列スキャンを参照してください。