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

Tablestore:JSON queries

最終更新日:Jul 28, 2026

Tablestore SDK for Java を使用して、多次元インデックス内の Object 型または Nested 型の JSON フィールドのサブフィールドをクエリできます。 Object フィールドは子オブジェクトの境界を保持しませんが、Nested フィールドは保持します。

前提条件

  • Tablestore SDK for Java をインストールし、クライアントを初期化します。

  • ターゲットフィールドは、検索インデックスで JSON フィールドとして設定され、jsonType は OBJECT または NESTED に設定されます。詳細については、「検索インデックスを作成する」をご参照ください。

機能説明

JSON クエリは専用のクエリタイプを使用しません。多次元インデックス内の JSON フィールドの jsonType に基づいてクエリメソッドを選択します。

JSON タイプ

フィールド間の関係

クエリメソッド

Object

配列内のオブジェクトの境界を保持しません。 異なるクエリ条件を、異なるオブジェクトで満たすことができます。

サブフィールドの型と一致要件に適したクエリタイプを直接使用します。 各サブフィールド名には完全なパスを指定します。

Nested

配列内の各オブジェクトを独立した子行として格納し、同じオブジェクト内のフィールド間の関係を保持します。

サブクエリを NestedQuery でラップし、path を使用して Nested フィールドの完全なパスを指定します。

たとえば、テーブルの address 列が String 型で、次の JSON 配列を格納していると仮定します。

[
  { "country": "China", "city": "hangzhou" },
  { "country": "usa", "city": "Seattle" }
]

country="China" と city="Seattle" の両方をクエリする場合、address がオブジェクト フィールドとして設定されていると、異なるオブジェクトが 2 つの条件を満たすことができるため、行が返されます。address がネストされた フィールドとして設定されている場合は、単一のオブジェクトで両方の条件を満たすことができないため、行は返されません。

search を呼び出して JSON クエリを実行します。

SearchResponse search(SearchRequest request)
説明

JSON フィールドの subFieldSchemas には、ベクターフィールドを含めることはできません。

Object フィールドのクエリ

次の例では、address.country が China で、address.city が Seattle である行をクエリします。address はオブジェクトフィールドであるため、異なるオブジェクトが 2 つの条件を満たすことができます。

String tableName = "example_table";
String indexName = "example_index";

TermQuery countryQuery = new TermQuery();
countryQuery.setFieldName("address.country");
countryQuery.setTerm(ColumnValue.fromString("China"));

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("address.city");
cityQuery.setTerm(ColumnValue.fromString("Seattle"));

BoolQuery objectQuery = new BoolQuery();
objectQuery.setMustQueries(Arrays.asList(countryQuery, cityQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(objectQuery);
searchQuery.setLimit(10);

SearchRequest request =
        new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
System.out.println(response.getRows());

Nested フィールドのクエリ

次の例では、address 内の同じオブジェクトの address.country の値が China で、かつ address.city の値が Seattle である行をクエリします。 ネストされたフィールドのクエリメソッドとパラメーターの詳細については、「ネストされたクエリ」をご参照ください。

String tableName = "example_table";
String indexName = "example_index";

TermQuery countryQuery = new TermQuery();
countryQuery.setFieldName("address.country");
countryQuery.setTerm(ColumnValue.fromString("China"));

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("address.city");
cityQuery.setTerm(ColumnValue.fromString("Seattle"));

BoolQuery childQuery = new BoolQuery();
childQuery.setMustQueries(Arrays.asList(countryQuery, cityQuery));

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("address");
nestedQuery.setQuery(childQuery);
nestedQuery.setScoreMode(ScoreMode.None);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);
searchQuery.setLimit(10);

SearchRequest request =
        new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
System.out.println(response.getRows());

パラメーター

検索リクエスト

リクエスト は SearchRequest 型で、次のパラメーターが含まれています。

名前

型

説明

tableName (必須)

String

テーブルの名前。

indexName (必須)

String

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

searchQuery (必須)

SearchQuery

クエリ条件と共通のクエリ構成。

columnsToGet (オプション)

SearchRequest.ColumnsToGet

返却する列の構成。 このパラメーターを構成しない場合、プライマリキー列のみが返されます。

timeoutInMillisecond (オプション)

int

リクエストレベルのクエリタイムアウト期間 (ミリ秒) です。デフォルト値は -1 です。この値は、個別のクエリタイムアウト期間が設定されていないことを示します。

routingValues (オプション)

List<PrimaryKey>

カスタムルートフィールドに対応するプライマリキー値。 カスタムルーティングを使用しない場合は、このパラメーターを構成する必要はありません。

クエリ構成

request.searchQuery は SearchQuery 型であり、以下のパラメーターが含まれています。

名前

型

説明

query (必須)

Query

クエリ条件。 Object フィールドの場合、サブフィールドタイプと一致要件に適したクエリタイプを直接設定します。 Nested フィールドの場合、このパラメーターを NestedQuery オブジェクトに設定します。

offset (オプション)

Integer

現在のクエリが開始される位置。

limit (オプション)

Integer

返す行の最大数です。このパラメーターを0にセットした場合、行は返されません。

highlight (オプション)

Highlight

まとめとハイライトの構成。Nested フィールドの場合、NestedQuery.innerHits を使用して、一致する子行のまとめとハイライトを構成します。

collapse (オプション)

Collapse

指定されたフィールドに基づいて重複した結果を削除する、結果の折りたたみ構成。

sort (オプション)

Sort

結果のソートメソッド。

trackTotalCount (オプション)

int

カウントする一致した行の最大数です。デフォルト値は TRACK_TOTAL_COUNT_DISABLED で、カウントを無効にします。すべての一致した行をカウントするには、このパラメーターを TRACK_TOTAL_COUNT に設定します。小さい値を設定すると、クエリパフォーマンスが向上します。

filter (オプション)

SearchFilter

query の結果に適用されるフィルターです。

aggregationList (オプション)

List<Aggregation>

集約構成。

groupByList (オプション)

List<GroupBy>

グループ化構成。

token (オプション)

byte[]

ページネーショントークンです。データの読み取りを続行するには、このパラメーターに前の応答に含まれる nextToken の値を設定します。token パラメーターにはソート条件がすでに含まれているため、このパラメーターを設定すると、SDK は sort をクリアします。

Nested クエリ条件

ネストされたフィールドをクエリすると、request.searchQuery.query は NestedQuery タイプになり、次のパラメーターが含まれます。

名前

型

説明

path (必須)

String

クエリする Nested フィールドのパス。 マルチレベルの Nested フィールドをクエリするには、対象フィールドの完全なパスを指定します。

query (必須)

Query

path にある子行で実行するクエリ条件です。各サブフィールド名に完全なパスを指定します。

scoreMode (必須)

ScoreMode

複数の子行が一致した場合に、親行のスコアを計算するために使用されるメソッドです。 None は子行の関連性スコアを計算しません。 Avg、Max、Min、および Total は、それぞれ子行のスコアの平均値、最大値、最小値、合計値を使用します。

innerHits (オプション)

InnerHits

一致する子行の返却、ソート、ページネーション、ハイライトに使用される構成。 このパラメーターを構成しない場合、一致する子行の詳細は返されません。

weight (オプション)

float

クエリの重み。デフォルト値は 1.0 で、値は正の浮動小数点数である必要があります。値が大きいほど、一致した行のスコアは増加しますが、一致する範囲は変わりません。

子行の返却構成

request.searchQuery.query.innerHits は InnerHits 型で、以下のパラメーターを含みます。

名前

型

説明

sort (オプション)

Sort

一致する子行のソート方法です。 ScoreSort と DocSort がサポートされています。 FieldSort はサポートされていません。

offset (オプション)

Integer

一致する子行が返される開始位置。

limit (オプション)

Integer

返される一致する子行の最大数です。デフォルト値は 3 です。

highlight (オプション)

Highlight

一致する子行のまとめとハイライトの構成。

返却される列

request.columnsToGet は SearchRequest.ColumnsToGet 型で、以下のパラメーターが含まれます。

名前

型

説明

columns (オプション)

List<String>

返される属性列の名前。このパラメーターは、 returnAll と returnAllFromIndex の両方が false の場合にのみ設定します。このパラメーターを設定しない場合、プライマリキー列のみが返されます。

returnAll (オプション)

boolean

テーブル内のすべての属性列を返すかどうかを指定します。デフォルト値は false です。

returnAllFromIndex (オプション)

boolean

インデックスが作成されたすべての属性列を返すかどうかを指定します。デフォルト値は false です。このパラメーターと returnAll の両方を true に設定することはできません。

応答

search メソッドは SearchResponse オブジェクトを返します。 次の表では、主なフィールドについて説明します。

名前

型

説明

totalCount

long

一致した行数です。getTotalCount() を呼び出して値を取得します。この値は trackTotalCount 構成に依存します。

rows

List<Row>

現在のクエリによって返される行です。getRows() を呼び出して行を取得します。行数は limit を超えません。

searchHits

List<SearchHit>

クエリヒットです。getSearchHits() を呼び出して値を取得します。このフィールドから、マッチした行、スコア、まとめとハイライトの結果、および Nested フィールドにマッチした子行を取得できます。

nextToken

byte[]

次のページのトークンです。getNextToken() を呼び出して値を取得します。値が null ではない場合は、次のリクエストでこの値を token として使用してデータの読み取りを続行します。

isAllSuccess

boolean

すべてのインデックスパーティションがクエリされたかどうかを示します。isAllSuccess() を呼び出して値を取得します。値が false の場合、部分的な結果のみが返され、totalCount は実際に一致した行数よりも少なくなる可能性があります。