全部產品
Search
文件中心

Tablestore:JSON查詢

更新時間:Dec 06, 2025

JSON包括Object類型和Nested類型,查詢 JSON Object類型時直接使用所需查詢類型進行操作即可,查詢JSON Nested類型時必須使用NestedQuery封裝查詢條件。

前提條件

使用限制

向量類型欄位無法在JSON中使用。

查詢情境

假設資料表中有id(String類型)和address(String類型)列,其中address列用於儲存JSON格式的資料。

假設某行address列值為[{ "country": "China", "city": "hangzhou" }, { "country": "usa", "city": "Seattle" }]。當查詢條件為country="China"city="Seattle"時,如果address列設定為Nested類型,則無法查到該行資料;如果address列設定為Object類型,則可以查詢到該行資料。

範例程式碼

JSON Nested類型查詢樣本

以下樣本用於查詢address的同一子行能滿足address.country為'China'且address.city為'Seattle'兩個條件的行資料。

from tablestore import *

def nested_query(client):
    # 查詢條件一:要求address子行的country列值為"China"
    term_query1 = TermQuery('address.country','China')

    # 查詢條件二:要求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'兩個條件的行資料。

from tablestore import *

def bool_query(client):
    # 查詢條件一:要求address子行的country列值為"China"
    term_query1 = TermQuery('address.country','China')

    # 查詢條件二:要求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)