Use uma consulta aninhada para consultar dados nos subcampos de campos Nested. Não é possível consultar campos Nested diretamente. Para consultar um campo Nested, especifique o caminho do campo e uma subconsulta em um objeto NestedQuery. A subconsulta pode ser de qualquer tipo.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar um cliente Tablestore.
Tabela de dados criada e preenchida. Para mais informações, consulte Criar uma tabela de dados e Gravar dados.
Índice de pesquisa criado para a tabela de dados. Para mais informações, consulte Criar um índice de pesquisa.
Parâmetros
Parâmetro | Descrição |
path | Caminho do campo Nested. Esse campo usa estrutura de árvore. Por exemplo, news.title especifica o subcampo title no campo Nested chamado news. |
query | Consulta aplicada ao subcampo dentro do campo Nested. Pode ser de qualquer tipo. |
score_mode | Valor usado para calcular a pontuação quando um campo contém vários valores. |
table_name | Nome da tabela de dados. |
index_name | Nome do índice de pesquisa. |
inner_hits | Configurações dos subcampos no campo Nested.
|
Exemplo
Campos Nested de nível único
Os exemplos a seguir mostram como consultar linhas em que o valor do campo col_nested.col_long seja maior ou igual a 100 e menor ou igual a 300.
-
Execute uma consulta aninhada com o Tablestore SDK for Python V5.2.1 ou posterior
Ao usar o Tablestore SDK for Python V5.2.1 ou posterior para executar uma consulta aninhada, o sistema retorna um objeto SearchResponse por padrão. O código a seguir mostra um exemplo de solicitação:
nested_query = RangeQuery('col_nested.col_long', range_from=100, range_to=300, include_lower=True, include_upper=True) query = NestedQuery('col_nested', nested_query) search_response = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ) print('request_id : %s' % search_response.request_id) print('is_all_succeed : %s' % search_response.is_all_succeed) print('total_count : %s' % search_response.total_count) print('rows : %s' % search_response.rows)Use o seguinte exemplo de solicitação para retornar resultados TUPLE:
nested_query = RangeQuery('col_nested.col_long', range_from=100, range_to=300, include_lower=True, include_upper=True) query = NestedQuery('col_nested', nested_query) rows, next_token, total_count, is_all_succeed, agg_result, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response() -
Execute uma consulta aninhada com uma versão do Tablestore SDK for Python anterior à 5.2.1
Se você usar uma versão do Tablestore SDK for Python anterior à 5.2.1 para executar uma consulta aninhada, o sistema retorna resultados TUPLE por padrão. O código a seguir mostra um exemplo de solicitação:
nested_query = RangeQuery('col_nested.col_long', range_from=100, range_to=300, include_lower=True, include_upper=True) query = NestedQuery('col_nested', nested_query) rows, next_token, total_count, is_all_succeed = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
Campos Nested com o recurso de destaque ativado
O código de exemplo a seguir mostra como consultar linhas em que o valor do campo col_nested.col_text seja tablestore e destacar as palavras-chave nos resultados da consulta.
def _print_rows(request_id, rows, total_count):
print('Request ID:%s' % request_id)
for row in rows:
print(row)
print('Rows return: %d' % len(rows))
print('Total count: %d' % total_count)
def _print_search_hit(hits):
for search_hit in hits:
print('\t score is %.6f' % search_hit.score)
for highlight_field in search_hit.highlight_result.highlight_fields:
print('\t\t highlight:%s:%s' % (highlight_field.field_name, highlight_field.field_fragments))
for inner_result in search_hit.search_inner_hits:
print('\t\t path:%s' % (inner_result.path))
_print_search_hit(inner_result.search_hits)
def highlight_query_for_nested(client):
print('********** Begin HighlightQueryForNested **********')
sort = Sort(
sorters=[FieldSort('col_nested.col_long', sort_order=SortOrder.ASC)]
)
highlight_parameter = HighlightParameter("col_nested.col_text", 1, 18, '<b>', '</b>', HighlightFragmentOrder.TEXT_SEQUENCE)
highlight_clause = Highlight([highlight_parameter], HighlightEncoder.PLAIN_MODE)
inner_hits_parameter = InnerHits(None, 0, 10, highlight_clause)
query = NestedQuery('n', MatchQuery('col_nested.col_text', 'tablestore'), ScoreMode.AVG, inner_hits_parameter)
search_response = client.search('<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
SearchQuery(query, limit=2, get_total_count=True),
ColumnsToGet(return_type=ColumnReturnType.ALL_FROM_INDEX)
)
print('----- Print Rows:')
print('search rows count:%d' % len(search_response.rows))
_print_rows(search_response.request_id,search_response.rows,search_response.total_count)
print('----- Print Highlight Result:')
search_hits = search_response.search_hits
print('search hit count:%d' % len(search_hits))
_print_search_hit(search_hits)
print('********** End HighlightQuery **********')
Perguntas frequentes
Referências
-
Ao usar um índice de pesquisa para consultar dados, utilize os seguintes métodos: consulta de termo, consulta de termos, consulta match all, consulta match, consulta match phrase, consulta de prefixo, consulta de intervalo, consulta curinga, consulta geográfica, consulta booleana, consulta de vetor KNN, consulta aninhada e consulta exists. Use esses métodos fornecidos pelo índice de pesquisa para consultar dados de várias dimensões conforme suas necessidades de negócios.
Ordene ou pagine as linhas que atendem às condições de consulta usando os recursos de ordenação e paginação. Para mais informações, consulte Ordenação e paginação.
Utilize o recurso de colapso (distinto) para agrupar o conjunto de resultados com base em uma coluna específica. Assim, os dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Para mais informações, consulte Colapso (distinto).
Para analisar dados em uma tabela de dados, use o recurso de agregação da operação Search ou execute instruções SQL. Por exemplo, obtenha valores mínimos e máximos, soma e número total de linhas. Para mais informações, consulte Agregação e Consulta SQL.
Caso precise obter todas as linhas que atendem às condições de consulta sem precisar ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Varredura paralela.