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

Tablestore:JSON クエリ

最終更新日:Dec 07, 2025

JSON データは Object 型または Nested 型にすることができます。Object 型のデータをクエリするには、必要なクエリタイプを直接使用できます。Nested 型のデータをクエリするには、クエリ条件を NestedQuery でラップする必要があります。

前提条件

制限事項

ベクトル型のフィールドは JSON では使用できません。

クエリシナリオ

データテーブルに String 型の `id` カラムと String 型の `address` カラムが含まれているとします。`address` カラムには、JSON フォーマットのデータが格納されます。

ある行の `address` カラムの値が [{ "country": "China", "city": "hangzhou" }, { "country": "usa", "city": "Seattle" }] であるとします。`address` カラムが Nested 型の場合、country="China"city="Seattle" のクエリではこの行は返されません。`address` カラムが Object 型の場合、このクエリはこの行を返します。

JSON Nested 型クエリの例

次の例では、`address` フィールドの単一のネストされた要素が、address.country が 'China' であり、かつ address.city が 'Seattle' であるという 2 つの条件を満たす行をクエリする方法を示します。

from tablestore import *

def nested_query(client):
    # 条件1:address のサブ行にある country は "China" である必要があります。
    term_query1 = TermQuery('address.country','China')

    # 条件2:address のサブ行にある city は "Seattle" である必要があります。
    term_query2 = TermQuery('address.city', 'Seattle')

    # BoolQuery と AND 条件を使用して、両方のクエリを満たすサブ行を検索します。
    bool_query = BoolQuery(
        must_queries=[term_query1, term_query2]
    )

    # NestedQuery 内で BoolQuery を使用して、単一のサブ行が複数の条件を満たすように指定します。
    nested_query = NestedQuery(
        path="address",  # ネストされたカラムへのパス。クエリ対象フィールドの親パスです。
        query=bool_query,  # 内部クエリ条件。
        score_mode=ScoreMode.NONE  # スコアリングモード。None に設定します。
    )

    # 検索クエリを構築します。
    search_query = SearchQuery(
        query=nested_query
    )

    # 検索を実行します。
    resp = client.search(table_name='<TABLE_NAME>',index_name='<SEARCH_INDEX_NAME>',
                         search_query=search_query)
    print("Row:", resp.rows)
    

JSON Object 型クエリの例

次の例では、`address` カラムで address.country が 'China' であり、かつ address.city が 'Seattle' であるという 2 つの条件を満たす行をクエリする方法を示します。

from tablestore import *

def bool_query(client):
    # 条件1:address のサブ行にある country は "China" である必要があります。
    term_query1 = TermQuery('address.country','China')

    # 条件2:address のサブ行にある city は "Seattle" である必要があります。
    term_query2 = TermQuery('address.city','Seattle')

    # BoolQuery と AND 条件を使用して、両方のクエリを満たすサブ行を検索します。
    bool_query = BoolQuery(
        must_queries=[term_query1, term_query2]
    )

    # 検索クエリを構築します。
    search_query = SearchQuery(
        query=bool_query
    )


    # 検索を実行します。
    resp = client.search(table_name='<TABLE_NAME>',index_name='<SEARCH_INDEX_NAME>',
                         search_query=search_query)
    print("Row:", resp.rows)