Uma consulta booleana recupera dados da tabela com base em uma combinação de subconsultas. O Tablestore retorna as linhas correspondentes às subconsultas. Uma subconsulta pode ser de qualquer tipo, inclusive outra consulta booleana.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar um cliente do 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 |
|
must_queries |
Lista de subconsultas. Retorna apenas as linhas que atendem a todas as condições das subconsultas. Equivale ao operador AND. |
|
must_not_queries |
Lista de subconsultas. Retorna apenas as linhas que não atendem a nenhuma condição das subconsultas. Equivale ao operador NOT. |
|
filter_queries |
Lista de subconsultas. Retorna apenas as linhas correspondentes a todos os subfiltros. Um filtro assemelha-se a uma consulta, mas não calcula a pontuação de relevância com base no número de subfiltros correspondidos pela linha. |
|
should_queries |
Lista de subconsultas opcionais para os resultados. Equivale ao operador OR. Retorna apenas as linhas que atendem ao número mínimo de condições de subconsulta especificado por should_queries. Uma pontuação geral de relevância mais alta indica que mais condições de subconsulta especificadas pelo parâmetro should_queries foram atendidas. |
|
minimum_should_match |
Número mínimo de condições de subconsulta especificadas pelo parâmetro should_queries que as linhas retornadas devem atender. Se apenas o parâmetro should_queries definir as condições de subconsulta, o valor padrão de minimum_should_match será 1. Se um ou mais dos parâmetros must_queries, must_not_queries e filter_queries também definirem condições de subconsulta, o valor padrão de minimum_should_match será 0. |
|
table_name |
Nome da tabela de dados. |
|
index_name |
Nome do índice de pesquisa. |
Exemplos
Os exemplos de código a seguir demonstram como executar consultas booleanas.
-
Tablestore SDK for Python V5.2.1 ou posterior
Por padrão, ao usar o Tablestore SDK for Python V5.2.1 ou posterior para executar uma consulta booleana, o sistema retorna um objeto SearchResponse. O código a seguir mostra um exemplo de solicitação:
# Col_Keyword > 'key100' and (Col_Long > 110 and Col_Long < 200) and not (Col_Keyword = 'key121') and # should_queries(Col_Keyword > 'key120' or Col_Long < 300, minimum_should_match = 2) bool_query = BoolQuery( must_queries=[ RangeQuery('Col_Keyword', range_from='key100', include_lower=False), # Use BoolQuery. BoolQuery( # Set subqueries to obtain data that meets all filtering conditions. must_queries=[ RangeQuery('Col_Long', range_from=110, include_lower=False), RangeQuery('Col_Long', range_to=200, include_upper=False) ], ) ], # Set subqueries to exclude data that meets all filtering conditions. must_not_queries=[ TermQuery('Col_Keyword', 'key121') ], should_queries=[ RangeQuery('Col_Keyword', range_from='key120', include_lower=False), RangeQuery('Col_Long', range_to=300, include_upper=130) ], minimum_should_match=2 ) # Construct a Boolean query by specifying query parameters, including sort, limit, and get_total_count. search_response = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery( bool_query, sort=Sort(sorters=[FieldSort('Col_Long', SortOrder.ASC)]), 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 exemplo de solicitação a seguir para retornar resultados do tipo Tuple:
# Col_Keyword > 'key100' and (Col_Long > 110 and Col_Long < 200) and not (Col_Keyword = 'key121') and # should_queries(Col_Keyword > 'key120' or Col_Long < 300, minimum_should_match = 2) bool_query = BoolQuery( must_queries=[ RangeQuery('Col_Keyword', range_from='key100', include_lower=False), # Use BoolQuery. BoolQuery( # Set subqueries to obtain data that meets all filtering conditions. must_queries=[ RangeQuery('Col_Long', range_from=110, include_lower=False), RangeQuery('Col_Long', range_to=200, include_upper=False) ], ) ], # Set subqueries to exclude data that meets all filtering conditions. must_not_queries=[ TermQuery('Col_Keyword', 'key121') ], should_queries=[ RangeQuery('Col_Keyword', range_from='key120', include_lower=False), RangeQuery('Col_Long', range_to=300, include_upper=130) ], minimum_should_match=2 ) # Construct a Boolean query by specifying query parameters, including sort, limit, and get_total_count. rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery( bool_query, sort=Sort(sorters=[FieldSort('Col_Long', SortOrder.ASC)]), limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response() -
Tablestore SDK for Python anterior à versão 5.2.1
Ao usar uma versão do Tablestore SDK for Python anterior à 5.2.1 para executar uma consulta booleana, o sistema retorna resultados do tipo Tuple por padrão. O código a seguir mostra um exemplo de solicitação:
# Col_Keyword > 'key100' and (Col_Long > 110 and Col_Long < 200) and not (Col_Keyword = 'key121') and # should_queries(Col_Keyword > 'key120' or Col_Long < 300, minimum_should_match = 2) bool_query = BoolQuery( must_queries=[ RangeQuery('Col_Keyword', range_from='key100', include_lower=False), # Use BoolQuery. BoolQuery( # Set subqueries to obtain data that meets all filtering conditions. must_queries=[ RangeQuery('Col_Long', range_from=110, include_lower=False), RangeQuery('Col_Long', range_to=200, include_upper=False) ], ) ], # Set subqueries to exclude data that meets all filtering conditions. must_not_queries=[ TermQuery('Col_Keyword', 'key121') ], should_queries=[ RangeQuery('Col_Keyword', range_from='key120', include_lower=False), RangeQuery('Col_Long', range_to=300, include_upper=130) ], minimum_should_match=2 ) # Construct a Boolean query by specifying query parameters, including sort, limit, and get_total_count. rows, next_token, total_count, is_all_succeed = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery( bool_query, sort=Sort(sorters=[FieldSort('Col_Long', SortOrder.ASC)]), limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
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 classificação e paginação. Para mais informações, consulte Classificação e paginação.
Use o recurso collapse (distinct) 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 Collapse (distinct).
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, somas e o 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 ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Varredura paralela.