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)
该文章对您有帮助吗?