Um search index utiliza índices invertidos e column stores para oferecer suporte a consultas multidimensionais e análises estatísticas em big data. Use search indexes para consultas em colunas que não são chave primária, consultas booleanas, consultas difusas, busca de texto completo, busca vetorial e agregações como max, min, count e group by.
Informações gerais
Search indexes aplicam-se apenas aos modelos de tabela ampla .
Search indexes, bancos de dados e mecanismos de busca resolvem problemas complexos de consulta em big data, mas diferem nas seguintes formas:
Exceto por joins, transações e análise de relevância, o Tablestore oferece os recursos tanto de bancos de dados quanto de sistemas de busca. Ele combina a alta confiabilidade de dados de um banco de dados com as capacidades avançadas de consulta de um sistema de busca, substituindo a arquitetura comum database + search engine.
Se o seu cenário não envolver joins, transações ou análise complexa de relevância, use um search index do Tablestore.

Visão geral do índice
Um search index utiliza índices invertidos e column stores para resolver problemas de consulta multidimensional e análise estatística para big data. Ele suporta consultas em colunas que não são chave primária, consultas por prefixo, consultas difusas, consultas booleanas, consultas aninhadas, consultas geográficas, busca de texto completo, busca vetorial e agregação estatística (max, min, count, sum, avg, distinct_count, group_by, percentiles e histogram).
A figura a seguir mostra as estruturas de índice invertido, column store e índice espacial multidimensional utilizadas por um search index.

Diferentemente dos índices de bancos de dados tradicionais (como MySQL), um search index não se limita à regra de correspondência de prefixo mais à esquerda. Na maioria dos casos, basta um único search index por tabela. Por exemplo, uma tabela de alunos com colunas como nome, ID do aluno, gênero, série, turma e endereço residencial requer apenas um search index para suportar consultas combinadas como alunos chamados John Doe na terceira série, alunos do sexo masculino cujo endereço residencial está a menos de 1 km ou alunos da Turma 2 da 3ª Série que moram em uma área residencial específica.
Comparação de índices
O Tablestore suporta consultas por chave primária em tabelas de dados, além de dois tipos de índice para acelerar consultas: secondary index e search index. A tabela a seguir compara esses três métodos de consulta.
|
Método de consulta |
Princípio |
Cenário |
|
Chave primária |
Uma tabela de dados funciona como um grande mapa. Você só pode consultar dados pela chave primária. |
Adequado para cenários onde você conhece a chave primária completa ou um prefixo da chave. |
|
Secondary index |
Cria tabelas de índice cujas colunas de chave primária estendem a capacidade de consulta da tabela de dados para diferentes colunas. |
Recomendado quando as colunas de consulta são predeterminadas, a quantidade de colunas é pequena e você conhece a chave primária completa ou um prefixo da chave. |
|
Search index |
Utiliza estruturas como índices invertidos, árvores BKD e column stores para fornecer recursos avançados de consulta. |
Indicado para todos os cenários de consulta e análise além da cobertura de chave primária e secondary index: consultas em colunas que não são chave primária, consultas booleanas em quaisquer colunas, consultas de relacionamento, busca de texto completo, consultas geográficas, consultas difusas, consultas aninhadas, consultas de valor NULL e agregação estatística. |
Cenários
Search indexes são amplamente utilizados para consulta e análise de dados em diversos sistemas de aplicação. A tabela a seguir lista cenários comuns.
|
Sistema de aplicação |
Exemplo de cenário |
|
Plataforma de e-commerce |
Implemente categorização de produtos e filtragem de atributos para ajudar os usuários a pesquisar e filtrar produtos rapidamente. |
|
Aplicativo social |
Consulte relacionamentos de seguidores e amigos entre usuários, ou recomende e conecte usuários com base em tags de interesse. |
|
Análise de logs |
Execute buscas por palavras-chave e consultas por intervalo de tempo para localizar problemas rapidamente e analisar dados de log. |
|
Análise de dados de IoT |
Consulte e analise dados de dispositivos. Por exemplo, filtre e conte dados por tipo de dispositivo ou localização geográfica. |
|
Monitoramento de desempenho de aplicações |
Agrege e consulte dados de métricas. Por exemplo, filtre e resuma dados por intervalo de tempo ou nome da aplicação. |
|
Serviço baseado em localização |
Execute consultas geográficas e buscas próximas para fornecer informações sobre lojas, atrações e serviços nas proximidades. |
|
Mecanismo de busca de texto |
Realize busca de texto completo e classificação por relevância para encontrar documentos, artigos e outros conteúdos rapidamente. |
Recursos
Lista de recursos
A tabela a seguir lista os recursos do search index.
|
Recurso |
Descrição |
Documento |
|
Consulta em qualquer coluna (incluindo colunas de chave primária e colunas que não são chave primária) |
Consulte dados por qualquer coluna. Adequado para a maioria dos cenários de consulta. Se consultas por chave primária ou prefixo não atenderem às suas necessidades, crie um search index com os campos desejados e consulte pelos valores das colunas. |
Qualquer consulta de search index, como uma consulta básica |
|
Consulta booleana |
Combine vários campos para filtragem eficiente. Ideal para sistemas de pedidos, análise de logs e personas de usuários. Em um banco de dados relacional, uma tabela com dezenas de campos pode exigir centenas de índices para cobrir todas as combinações de campos. Combinações ausentes resultam em consultas ineficientes. Com o Tablestore, um único search index cobre todas as combinações de campos. Adicione ao índice os campos que você pode consultar e combine-os livremente usando a lógica And, Or e Not. |
|
|
Consulta geográfica |
Os dispositivos móveis tornaram os dados de localização geográfica cada vez mais valiosos. Aplicações de redes sociais, entrega de comida, esportes e Internet dos Veículos (IoV) exigem consultas baseadas em localização. Search indexes suportam os seguintes recursos de consulta geográfica:
Se sua aplicação requer consultas baseadas em localização, um search index do Tablestore fornece uma solução completa sem a necessidade de bancos de dados ou sistemas de busca adicionais. |
|
|
Índice de texto completo |
Encontre dados contendo uma frase especificada. Adequado para análise de big data, busca de conteúdo, gestão de conhecimento, análise de mídias sociais, análise de logs, sistemas de chat com IA, revisões de conformidade e recomendações personalizadas. Search indexes usam tokenização para busca de texto completo. Eles fornecem relevância BM25 básica, mas não relevância personalizada. Para necessidades complexas de busca por relevância, use um sistema de busca dedicado; caso contrário, um search index é suficiente. Cinco tipos de tokenização estão disponíveis: palavra única, delimitador, semântica mínima, semântica máxima e difusa. Para destacar palavras-chave nos resultados, utilize o recurso de resumo e destaque. |
|
|
Busca vetorial |
Search indexes suportam busca vetorial para consultas eficientes de vizinhos mais próximos aproximados em conjuntos de dados em grande escala. Adequado para geração aumentada por recuperação (RAG), sistemas de recomendação, detecção de similaridade (imagens, vídeos e fala) e processamento de linguagem natural. |
|
|
Consulta difusa |
Search indexes fornecem consultas por curinga, prefixo e sufixo para correspondência difusa em diferentes cenários.
|
|
|
Consulta de existência de coluna (consulta NULL) |
Verifique se uma coluna tem um valor nulo. Adequado para verificações de integridade de dados e limpeza de dados. |
|
|
Consulta aninhada |
Além de estruturas planas, os dados de aplicações frequentemente possuem estruturas aninhadas multiníveis. Por exemplo, um sistema de marcação de imagens armazena imagens com múltiplas entidades (casas, carros, pessoas), cada uma com posição, tamanho e peso (pontuação) diferentes. Cada imagem mapeia para várias tags, e cada tag possui um nome e uma pontuação de peso. Para filtrar imagens por condições de tag, utilize a consulta de tipo aninhado. As tags de imagem são armazenadas no formato JSON:
Consultas de tipo aninhado lidam com dados que possuem relacionamentos lógicos multiníveis, proporcionando flexibilidade para modelagem complexa de dados. Para estruturas de dados aninhadas complexas (como JSON), utilize o recurso de resumo e destaque para localizar com precisão as informações necessárias. |
|
|
Deduplicação |
Search indexes deduplicam resultados de consulta para melhorar a diversidade. A deduplicação limita quantas vezes um valor de atributo específico aparece em um único conjunto de resultados. Por exemplo, ao pesquisar por |
|
|
Ordenação |
O Tablestore ordena os dados pela chave primária em ordem alfabética por padrão. Para ordenar por outros campos, utilize o recurso de ordenação de um search index. Search indexes suportam ordem crescente ou decrescente, ordenação por condição única e ordenação por múltiplas condições. Toda ordenação é global. Por padrão, os resultados do search index são ordenados pela chave primária em ordem alfabética. |
|
|
Número total de linhas |
Ao consultar dados com um search index, você pode retornar o número de linhas correspondentes. Isso é útil para validação e operações de dados.
|
|
|
Agregação estatística |
Search indexes fornecem funções de agregação comuns: Max, Min, Avg, Sum, Count, DistinctCount, GroupBy, Percentile e Histogram. Estas atendem às necessidades estatísticas básicas para análises leves. |
Regiões suportadas
Atualmente, o recurso search index está disponível nas seguintes regiões: China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Guangzhou), China (Chengdu), China (Hong Kong), Japão (Tóquio), Singapura, Malásia (Kuala Lumpur), Indonésia (Jacarta), Filipinas (Manila), Tailândia (Bangkok), Alemanha (Frankfurt), Reino Unido (Londres), EUA (Vale do Silício), EUA (Virgínia), Arábia Saudita (Riade - Região Parceira), e . O recurso de busca vetorial ainda não é suportado na região EUA (Vale do Silício).
Recuperação de desastres
Em regiões com capacidades de recuperação de desastres de zona, os search indexes fornecem armazenamento redundante de zona por padrão. Os dados são armazenados em várias zonas dentro da região. Se uma única zona falhar, os serviços de leitura e gravação continuam sem interrupção.
Atualmente, o search index suporta armazenamento redundante de zona nas seguintes regiões: China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Hong Kong), Japão (Tóquio), Singapura, Indonésia (Jacarta), Alemanha (Frankfurt), e .
Ciclo de vida dos dados
Se sua tabela de dados não tiver operações UpdateRow, você poderá usar o TTL do search index. Gestão de ciclo de vida.
Se você precisar reter dados apenas por um período específico e o campo de tempo não exigir atualizações, implemente o TTL fragmentando tabelas por tempo.
|
Dimensão |
Fragmentação de tabela por tempo |
|
Princípio |
Fragmente tabelas por um intervalo fixo (dia, semana, mês ou ano). Crie um search index para cada tabela e retenha as tabelas de dados pela duração necessária. Por exemplo, para reter dados por seis meses, armazene os dados de cada mês em uma tabela separada (table_1 a table_6) com seu próprio search index. Todo mês, exclua a tabela referente a seis meses atrás. Ao consultar, se o intervalo de tempo cair dentro de uma única tabela, consulte apenas essa tabela. Se abranger várias tabelas, consulte cada uma e mescle os resultados. |
|
Regra |
Uma única tabela (índice único) não deve exceder 50 bilhões de linhas. O desempenho da consulta é ideal quando a contagem de linhas permanece abaixo de 20 bilhões. |
|
Vantagens |
|
Versões de dados
Search indexes não suportam múltiplas versões de dados. Você não pode criar um search index para uma tabela de dados com múltiplas versões habilitadas.
Em uma tabela de versão única, se você personalizar o timestamp para cada gravação, gravar dados com um número de versão menor após um maior pode sobrescrever a versão maior.
Os dados retornados pelas solicitações Search e ParallelScan não incluem necessariamente a propriedade timestamp.
Limites
Search indexes sincronizam dados da tabela de dados de forma assíncrona, portanto, consultas em tempo real não são possíveis. A latência típica é de até 3 segundos. Limites do search index.
Faturamento
Search indexes são cobrados pelo espaço de armazenamento ocupado pelos dados do índice e pelos recursos de computação consumidos para consultas e análises. Visão geral do faturamento.
Desenvolvimento e integração
Referência da API
Search indexes fornecem operações de API para gestão de índices e consulta de dados. A consulta de dados inclui a API Search de uso geral e a API ParallelScan para exportação de dados. O ParallelScan sacrifica alguns recursos (ordenação, agregação) para obter maior desempenho e throughput.
|
Categoria |
API |
Descrição |
|
Gestão de índices |
Cria um search index. |
|
|
Atualiza a configuração de um search index, incluindo seu tempo de vida (TTL) e esquema de índice. |
||
|
Obtém a descrição detalhada de um search index. |
||
|
Lista os search indexes. |
||
|
Exclui um search index. |
||
|
Consulta de dados |
API de consulta com recursos completos. Suporta todos os recursos do search index, incluindo funções de consulta, ordenação e agregação estatística. Os resultados são retornados na ordem especificada.
|
|
|
API de exportação de dados com suporte a varredura paralela. Inclui todas as funções de consulta, mas omite ordenação e agregação estatística. Retorna todos os dados correspondentes com maior velocidade. Com uma única concorrência, o throughput do ParallelScan é 5 vezes superior ao da API Search.
Ao exportar dados com múltiplas solicitações concorrentes, utilize a API ComputeSplits para obter a concorrência máxima para uma única solicitação ParallelScan. |
Métodos de integração
Use os seguintes SDKs ou ferramentas CLI para trabalhar com search indexes.
FAQ
Por que não consigo recuperar dados usando a API Search de um search index?
Quais são as diferenças entre usar a API GetRange e a API Search para consultas de intervalo?
O Tablestore suporta consultas semelhantes a 'in' e 'between...and' em bancos de dados relacionais?
Como aumento o 'limit' da API Search de um search index para 1.000?
Por que CUs de leitura reservadas são geradas quando uso um search index?
A configuração de CU de leitura reservada para um search index pode ser ajustada?
O throughput de leitura reservada de um search index pode ser coberto por um plano de CU reservada?
Referências
-
Para consultar e analisar dados com SQL, utilize o recurso de consulta SQL do Tablestore.
NotaVocê também pode analisar dados no Tablestore usando motores de computação como MaxCompute, Spark, Hive, HadoopMR, Function Compute ou Flink. Visão geral de computação e análise.
Apêndice: Mapeamento SQL
Alguns recursos do search index mapeiam para funções SQL. A tabela a seguir lista os mapeamentos.
|
SQL |
Search index |
Documentação do search index |
|
Show |
DescribeSearchIndex |
|
|
Select |
Parâmetro ColumnsToGet em qualquer consulta |
Qualquer consulta de search index, como uma consulta básica |
|
From |
Parâmetro IndexName em qualquer consulta Importante
Índice único é suportado. Múltiplos índices ainda não são suportados. |
Qualquer consulta de search index, como uma consulta básica |
|
Where |
Condições em qualquer consulta |
Qualquer consulta de search index, como uma consulta básica |
|
Order by |
Parâmetro sort em qualquer consulta |
|
|
Limit |
Parâmetro limit em qualquer consulta |
|
|
Delete |
|
|
|
Like |
WildcardQuery |
|
|
And |
operator = and em BoolQuery |
|
|
Or |
operator = or em BoolQuery |
|
|
Not |
BoolQuery(mustNotQueries) |
|
|
Between |
RangeQuery |
|
|
Null |
ExistsQuery |
|
|
In |
TermsQuery |
|
|
Min |
Agregação: min |
|
|
Max |
Agregação: max |
|
|
Avg |
Agregação: avg |
|
|
Count |
Agregação: count |
|
|
Count(distinct) |
Agregação: distinctCount |
|
|
Sum |
Agregação: sum |
|
|
Group By |
GroupBy |