JSON包括Object類型和Nested類型,查詢 JSON Object類型時直接使用所需查詢類型進行操作即可,查詢JSON Nested類型時必須使用NestedQuery封裝查詢條件。
前提條件
已在資料表上建立多元索引並配置JSON欄位的類型。
使用限制
向量類型欄位無法在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)