Use o método CreateSearchIndex para criar um índice de pesquisa em uma tabela de dados. Uma tabela pode ter vários índices de pesquisa. Ao criar o índice, adicione os campos que deseja consultar. Também é possível configurar opções avançadas, como chaves de roteamento personalizadas e pré-ordenação.
Pré-requisitos
O cliente do Tablestore está inicializado. Para mais informações, consulte Inicializar o cliente do Tablestore.
-
Uma tabela de dados foi criada e atende às seguintes condições:
O número máximo de versões está definido como 1.
O tempo de vida (TTL) está definido como -1 ou as atualizações da tabela estão desativadas.
Observações de uso
Ao criar um índice de pesquisa, o tipo de dados de cada campo no índice deve corresponder ao tipo de dados do campo equivalente na tabela de dados.
Para definir um TTL específico para o índice de pesquisa (valor diferente de -1), desative o recurso de gravação UpdateRow na tabela de dados. O TTL do índice de pesquisa deve ser menor ou igual ao TTL da tabela. Para mais detalhes, consulte Gerenciamento de ciclo de vida.
Parâmetros
Ao criar um índice de pesquisa, especifique o nome da tabela (table_name), o nome do índice de pesquisa (index_name) e o esquema do índice (schema). O esquema inclui esquemas de campos (field_schemas), configurações de índice (index_setting) e definições de pré-ordenação (index_sort). A tabela a seguir descreve esses parâmetros.
|
Parâmetro |
Descrição |
|
table_name |
Nome da tabela de dados. |
|
index_name |
Nome do índice de pesquisa. |
|
field_schemas |
Lista de objetos field_schema. Cada objeto field_schema contém os seguintes parâmetros:
|
|
index_setting |
Configurações do índice, incluindo a definição routing_fields. routing_fields (Opcional): Campos de roteamento personalizados. Selecione algumas colunas de chave primária como campos de roteamento. Normalmente, basta definir apenas um. Se você definir várias chaves de roteamento, o sistema concatenará seus valores em um único valor. Quando os dados do índice são gravados, o sistema determina a partição de dados com base nos valores dos campos de roteamento. Registros com os mesmos valores de campo de roteamento são distribuídos para a mesma partição de dados. |
|
index_sort |
Configurações de pré-ordenação do índice, incluindo a definição sorters. Se você não configurar este parâmetro, os dados serão ordenados pela chave primária por padrão. Nota
Índices de pesquisa que contêm campos Nested não suportam pré-ordenação de índice (indexSort). sorters (Obrigatório): Método de pré-ordenação para o índice. Métodos suportados: ordenação por chave primária e ordenação por valor de campo. Para mais informações, consulte Ordenação e paginação.
|
Exemplos
Especificar analisadores ao criar um índice de pesquisa
O código de exemplo a seguir cria um índice de pesquisa com analisadores configurados. O índice contém seis campos: k (Keyword), t (Text), g (Geopoint), ka (array de Keyword), la (array de Long) e n (Nested). O campo n possui três subcampos: nk (Keyword), nl (Long) e nt (Text).
def create_search_index(client):
# A Keyword field. Create an index and enable statistical aggregation.
field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
# A Text field. Create an index and use single-word tokenization.
field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD)
# A Text field. Create an index and use fuzzy tokenization.
#field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.FUZZY,analyzer_parameter=FuzzyAnalyzerParameter(1, 6))
# A Text field. Create an index and use a custom separator (a comma) for tokenization.
#field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SPLIT, analyzer_parameter = SplitAnalyzerParameter(","))
# A Geopoint field. Create an index.
field_c = FieldSchema('g', FieldType.GEOPOINT, index=True)
# A Keyword array field. Create an index.
field_d = FieldSchema('ka', FieldType.KEYWORD, index=True, is_array=True)
# A Long array field. Create an index.
field_e = FieldSchema('la', FieldType.LONG, index=True, is_array=True)
# A Nested field that includes three sub-fields: nk (Keyword), nl (Long), and nt (Text).
field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
FieldSchema('nk', FieldType.KEYWORD, index=True),
FieldSchema('nl', FieldType.LONG, index=True),
FieldSchema('nt', FieldType.TEXT, index=True),
])
fields = [field_a, field_b, field_c, field_d, field_e, field_n]
index_setting = IndexSetting(routing_fields=['PK1'])
index_sort = None # When a search index contains a Nested field, you cannot set index pre-sorting.
#index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
client.create_search_index('<TABLE_NAME>', '<SEARCH_INDEX_NAME>', index_meta)
Criar um índice de pesquisa e configurar campos vetoriais
O código de exemplo a seguir cria um índice de pesquisa com campos vetoriais configurados. O índice contém três campos: col_keyword (Keyword), col_long (Long) e col_vector (Vector). O algoritmo de medida de distância para o campo vetorial é o produto escalar.
def create_search_index(client):
index_meta = SearchIndexMeta([
FieldSchema('col_keyword', FieldType.KEYWORD, index=True, enable_sort_and_agg=True), # String type
FieldSchema('col_long', FieldType.LONG, index=True), # Numeric type
FieldSchema("col_vector", FieldType.VECTOR, # Vector type
vector_options=VectorOptions(
data_type=VectorDataType.VD_FLOAT_32,
dimension=4, # The vector dimension is 4, and the similarity algorithm is dot product.
metric_type=VectorMetricType.VM_DOT_PRODUCT
)),
])
client.create_search_index(table_name, index_name, index_meta)
Ativar resumo e destaque ao criar um índice de pesquisa
O código de exemplo a seguir cria um índice de pesquisa com resumo e destaque ativados. O índice contém três campos: k (Keyword), t (Text) e n (Nested). O campo n possui três subcampos: nk (Keyword), nl (Long) e nt (Text). O recurso de resumo e destaque está habilitado para o campo t e para o subcampo nt do campo n.
def create_search_index0905(client):
# A Keyword field. Create an index and enable statistical aggregation.
field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
# A Text field. Create an index, use single-word tokenization, and enable summary and highlighting for the field.
field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD,
enable_highlighting=True)
# A Nested field that includes three sub-fields: nk (Keyword), nl (Long), and nt (Text). The summary and highlighting feature is enabled for the nt sub-column.
field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
FieldSchema('nk', FieldType.KEYWORD, index=True),
FieldSchema('nl', FieldType.LONG, index=True),
FieldSchema('nt', FieldType.TEXT, index=True, enable_highlighting=True),
])
fields = [field_a, field_b, field_n]
index_setting = IndexSetting(routing_fields=['id'])
index_sort = None # When a search index contains a Nested field, you cannot set index pre-sorting.
# index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
client.create_search_index('pythontest', 'pythontest_0905', index_meta)
Perguntas frequentes
Diferenças entre consultas de intervalo usando as operações GetRange e Search
O Tablestore suporta o armazenamento de dados no formato JSON?
Dados não encontrados usando a operação Search de um índice de pesquisa
O Tablestore suporta consultas semelhantes a IN e BETWEEN...AND em bancos de dados relacionais?
O erro "field:xx must enable enable_sort_and_agg" ocorre ao usar um índice de pesquisa
Referências
Após criar um índice de pesquisa, consulte dados em múltiplas dimensões usando vários tipos de consulta, como 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, pesquisa vetorial, consulta aninhada e consulta de existência de coluna.
Durante a consulta de dados, execute operações de ordenação e paginação, destaque ou colapso (deduplicação) no conjunto de resultados.
Depois de criar um índice de pesquisa, gerencie-o executando operações como gerenciamento de ciclo de vida, modificação dinâmica do esquema, listagem de índices de pesquisa, consulta de descrições de índice de pesquisa e exclusão de índice de pesquisa.
Para analisar dados, como calcular valor máximo, mínimo, soma ou contagem de linhas, utilize o recurso de agregação ou o recurso de consulta SQL.
Caso precise exportar dados rapidamente sem exigir uma ordem específica para o conjunto de resultados, utilize o recurso de varredura paralela.