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

Tablestore:範囲クエリ

最終更新日:Dec 28, 2024

このトピックでは、Tablestore SDK for Java を使用して検索インデックスの範囲クエリを実行する方法について説明します。範囲条件を指定して、範囲内にあるデータをクエリできます。

前提条件

パラメーター

パラメーター

説明

query

クエリタイプ。このパラメーターを RangeQuery に設定します。このパラメーターは、次のフィールドで構成されます。

  • fieldName: 一致させるフィールドの名前。

    説明

    フィールドのタイプが Text の場合、フィールドの少なくとも 1 つのトークンが範囲内にある場合、行はクエリ条件を満たします。

  • from: クエリの開始値。

    範囲条件を指定する場合、greaterThan を使用してより大きいを表し、greaterThanOrEqual を使用して以上を表すことができます。

  • to: クエリの終了値。

    範囲条件を指定する場合、lessThan を使用してより小さいを表し、lessThanOrEqual を使用して以下を表すことができます。

  • includeLower: greaterThan を使用して範囲を指定する場合、クエリの開始値を範囲に含めるかどうかを指定します。デフォルト値: false。false の値は、greaterThan を使用して範囲を指定する場合、クエリの開始値が範囲に含まれないことを指定します。

  • includeUpper: lessThan を使用して範囲を指定する場合、クエリの終了値を範囲に含めるかどうかを指定します。デフォルト値: false。false の値は、lessThan を使用して範囲を指定する場合、クエリの終了値が範囲に含まれないことを指定します。

sort

ソート方法。詳細については、ソートとページングの実行を参照してください。

getTotalCount

クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値: false。false の値は、クエリ条件を満たす行の総数が返されないことを指定します。

このパラメーターを true に設定すると、クエリのパフォーマンスが低下します。

tableName

データテーブルの名前。

indexName

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

columnsToGet

クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメーターには、returnAll フィールドと columns フィールドを設定できます。

returnAll フィールドのデフォルト値は false で、クエリ条件を満たす各行のすべての列が返されないことを指定します。columns フィールドを使用して、返す列を指定できます。columns フィールドを使用して返す列を指定しない場合、プライマリキー列のみが返されます。

returnAll フィールドを true に設定すると、クエリ条件を満たす各行のすべての列が返されます。

private static void rangeQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    RangeQuery rangeQuery = new RangeQuery(); // クエリタイプを RangeQuery に設定します。
    
    /**
     * 例 1: Col_Long 列の値が 3 より大きい行をクエリします。
     */
    rangeQuery.setFieldName("Col_Long");
    rangeQuery.greaterThan(ColumnValue.fromLong(3));
    
    /**
     * //例 2: Col_Date_String 列の値が 2020-01-01 10:55:12 以上 2021-03-03 08:20:50 未満の行をクエリします。
     * //Col_Date_String 列のタイプは、データテーブルでは String、データテーブルがマッピングされている検索インデックスでは Date です。検索インデックスの Col_Date_String 列の値は yyyy-MM-dd HH:mm:ss 形式です。
     * rangeQuery.setFieldName("Col_Date_String");
     * rangeQuery.greaterThanOrEqual(ColumnValue.fromString("2020-01-01 10:55:12"));
     * rangeQuery.lessThan(ColumnValue.fromString("2021-03-03 08:20:50"));
     */
     
    /**
     * //例 3: Col_Date_Long 列の値が 1731036722 より大きい行をクエリします。
     * //Col_Date_Long 列のタイプは、データテーブルでは Integer、データテーブルがマッピングされている検索インデックスでは Date です。検索インデックスの Col_Date_Long 列の値は秒単位のタイムスタンプです。
     * rangeQuery.setFieldName("Col_Date_Long");
     * rangeQuery.greaterThan(ColumnValue.fromLong(1731036722));
     */
     
    searchQuery.setQuery(rangeQuery);
    searchQuery.setGetTotalCount(true); // クエリ条件を満たす行の総数を返すように指定します。
    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    //columnsToGet パラメーターを設定して、特定の列またはすべての列を返すように指定します。 columnsToGet パラメーターを設定しない場合、プライマリキー列のみが返されます。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    // すべての列を返すように指定します。
    //columnsToGet.setReturnAll(true);
    // 特定の列を返すように指定します。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2"));
    //searchRequest.setColumnsToGet(columnsToGet);
    SearchResponse resp = client.search(searchRequest);
    
    //System.out.println("TotalCount: " + resp.getTotalCount());// 返された行数ではなく、一致する行の総数を表示します。
    System.out.println("Row: " + resp.getRows());
}

FAQ

参考資料