Criar ou atualizar índice (API REST de visualização)
Aplica-se a: 2023-07-01-Preview. Esta versão não é mais suportada. Atualize imediatamente para uma versão mais recente.
Importante
2023-07-01-Preview adiciona pesquisa vetorial.
- "vectorSearch" objeto, uma configuração de configurações de pesquisa vetorial. Aplica-se apenas a algoritmos de pesquisa vetorial.
- "Collection(Edm.Single)" tipo de dados, necessário para um campo vetorial. Representa um número de ponto flutuante de precisão única como o tipo primitivo.
- "dimensões" propriedade, necessária para um campo vetorial. Representa a dimensionalidade de suas incorporações vetoriais.
- "vectorSearchConfiguration" propriedade, necessária para um campo vetorial. Seleciona a configuração do algoritmo para este campo.
2021-04-30-Preview adiciona:
- "semanticConfiguration" usado para definir o escopo da classificação semântica para campos específicos.
- "identidade", sob "encryptionKey" , usada para recuperar uma chave de criptografia gerenciada pelo cliente do Cofre de Chaves do Azure usando uma identidade gerenciada atribuída pelo usuário.
2020-06-30-Preview adiciona:
- "normalizadores", usados para insensibilidade a maiúsculas e minúsculas em classificações e filtros.
Um índice especifica o esquema de índice, incluindo a coleção de campos (nomes de campos, tipos de dados e atributos), mas também outras construções (sugestões, perfis de pontuação e configuração de CORS) que definem outros comportamentos de pesquisa.
Você pode usar POST ou PUT em uma solicitação de criação. Para qualquer um deles, o corpo da solicitação fornece a definição do objeto.
POST https://[servicename].search.windows.net/indexes?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
Para solicitações de atualização, use PUT e especifique o nome do índice no URI.
PUT https://[servicename].search.windows.net/indexes/[index name]?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
HTTPS é necessário para todas as solicitações de serviço. Se o índice não existir, ele será criado. Se já existir, é atualizado para a nova definição.
Criação de um índice estabelece o esquema e os metadados. Preencher o índice é uma operação separada. Para esta etapa, você pode usar um indexador (consulte Indexer operations, disponível para fontes de dados suportadas) ou Adicionar, atualizar ou excluir documentos. O número máximo de índices que você pode criar varia de acordo com a camada de preço. Dentro de cada índice, há limites para elementos individuais. Para obter mais informações, consulte Limites de serviço para o Azure AI Search.
Atualizar um índice existente deve incluir a definição completa do esquema, incluindo quaisquer definições originais que você deseja preservar. Em geral, o melhor padrão para atualizações é recuperar a definição de índice com um GET, modificá-lo e, em seguida, atualizá-lo com PUT.
Como um índice existente contém conteúdo, muitas modificações de índice exigem uma queda de índice e uma reconstrução. As seguintes alterações de esquema são uma exceção a esta regra:
Adicionar novos campos
Adicionar ou alterar perfis de pontuação
Adicionando ou alterando configurações semânticas
Alterar as opções do CORS
Alterar campos existentes com qualquer uma das três modificações a seguir:
- Mostrar ou ocultar campos (
retrievable
: true | false) - Alterar o analisador usado no momento da consulta (
searchAnalyzer
) - Adicionar ou editar o sinônimoMapa usado no momento da consulta (
synonymMaps
)
- Mostrar ou ocultar campos (
Para fazer qualquer uma das alterações de esquema acima em um índice existente, especifique o nome do índice no URI da solicitação e inclua uma definição de índice totalmente especificada com os elementos novos ou alterados.
Quando um novo campo é adicionado, todos os documentos existentes no índice têm automaticamente um valor nulo para esse campo. Nenhum espaço de armazenamento extra é consumido até que uma de duas coisas ocorra: um valor é fornecido para o novo campo (usando mesclagem) ou novos documentos são adicionados.
As atualizações de um suggester
têm restrições semelhantes: novos campos podem ser adicionados a um suggester
ao mesmo tempo em que campos são adicionados, mas os campos existentes não podem ser removidos nem adicionados a suggesters
sem uma reconstrução de índice.
Atualizações para um analisador, um tokenizador, um filtro de token ou um filtro de caracteres não são permitidas. Novas podem ser criadas com as alterações desejadas, mas você deve colocar o índice offline ao adicionar as novas definições do analisador. Definir o sinalizador allowIndexDowntime
como true na solicitação de atualização de índice coloca o índice offline:
PUT https://[search service name].search.windows.net/indexes/[index name]?api-version=[api-version]&allowIndexDowntime=true
Essa operação coloca o índice offline por pelo menos alguns segundos, o que significa que as solicitações de indexação e consulta falham até que o índice esteja online novamente e pronto para lidar com solicitações.
Parâmetros de URI
Cabeçalhos de solicitação
A tabela a seguir descreve os cabeçalhos de solicitação obrigatórios e opcionais.
Campos | Descrição |
---|---|
Tipo de conteúdo | Necessário. Defina esse valor como application/json |
Chave API | Opcional se você estiver usando funções do Azure e um token de portador for fornecido na solicitação, caso contrário, uma chave será necessária. Uma chave de api é uma cadeia de caracteres exclusiva gerada pelo sistema que autentica a solicitação no seu serviço de pesquisa. As solicitações de criação devem incluir um cabeçalho api-key definido para sua chave de administrador (em vez de uma chave de consulta). Consulte Conectar-se à Pesquisa de IA do Azure usando de autenticação de chave para obter detalhes. |
Órgão do Pedido
O corpo da solicitação contém uma definição de esquema, que inclui a lista de campos de dados em documentos que são alimentados nesse índice.
O JSON a seguir é uma representação de alto nível de um esquema que oferece suporte à pesquisa vetorial. Um esquema requer um campo chave, e esse campo-chave pode ser pesquisável, filtrável, classificável e facial.
Um campo de pesquisa vetorial é do tipo Collection(Edm.Single)
. Como os campos vetoriais não são textuais, um campo vetorial não pode ser usado como chave e não aceita analisadores, normalizadores, sugestões ou sinônimos. Ele deve ter uma propriedade "dimensions" e uma propriedade "vectorSearchConfiguration".
Um esquema que suporta pesquisa vetorial também pode suportar a pesquisa por palavra-chave. Outros campos não vetoriais no índice podem usar quaisquer analisadores, sinônimos e perfis de pontuação que você incluir no índice.
{
"name": (optional on PUT; required on POST) "Name of the index",
"description": (optional) "Description of the index",
"fields": [
{
"name": "name_of_field",
"type": "Edm.String | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint | Edm.ComplexType | Collection(Edm.String) | Collection(Edm.Int32) | Collection(Edm.Int64) | Collection(Edm.Single) | Collection(Edm.Double) | Collection(Edm.Boolean) | Collection(Edm.DateTimeOffset) | Collection(Edm.GeographyPoint) | Collection(Edm.ComplexType)",
"key": true | false (default, only Edm.String fields can be keys, enable on one field only),
"searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),
"filterable": true (default) | false,
"sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),
"facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),
"retrievable": true (default) | false,
"analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)
"searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)
"indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)
"normalizer": "name_of_normalizer", (optional, applies only to filterable, facetable, or sortable Edm.String and Collection(Edm.String) fields.)
"synonymMaps": [ "name_of_synonym_map" ], (optional, only one synonym map per field is currently supported),
"fields" : [ ... ], (optional, a list of sub-fields if this is a field of type Edm.ComplexType or Collection(Edm.ComplexType). Must be null or empty for simple fields.)
"dimensions": 1234, (required for vector field definitions. Prohibited for non-vector fields. Integer specifying the dimensionality of the embeddings generated by a machine learning model)
"vectorSearchConfiguration": "name_of_algorithm_config" (required for vector field definitions. Prohibited for non-vector fields. This should reference an algorithm configuration.)
}
],
"similarity": (optional) { },
"suggesters": (optional) [ ... ],
"scoringProfiles": (optional) [ ... ],
"semantic": (optional) { },
"vectorSearch": (optional) {
"algorithmConfigurations": [
{
"name": "name_of_algorithm_config",
"kind": "hnsw" (algorithm type. Only "hnsw" is supported currently.),
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
]},
"normalizers":(optional) [ ... ],
"analyzers":(optional) [ ... ],
"charFilters":(optional) [ ... ],
"tokenizers":(optional) [ ... ],
"tokenFilters":(optional) [ ... ],
"defaultScoringProfile": (optional) "Name of a custom scoring profile to use as the default",
"corsOptions": (optional) { },
"encryptionKey":(optional) { }
}
Request contém as seguintes propriedades:
Propriedade | Descrição |
---|---|
Designação | Necessário. O nome do índice. Um nome de índice deve conter apenas letras minúsculas, dígitos ou traços, não pode começar ou terminar com traços e está limitado a 128 caracteres. |
Descrição | Uma descrição opcional. |
campos | Uma coleção de campos para esse índice, onde cada campo tem um nome, um tipo de dados suportado que esteja em conformidade com o Modelo de Dados de Entidade (EDM) e atributos que definem ações permitidas nesse campo. A coleção de campos deve ter um campo do tipo Edm.String com "key" definido como "true". Este campo representa o identificador exclusivo, às vezes chamado de ID do documento, para cada documento armazenado com o índice. A coleção de campos agora aceita campos vetoriais. |
semelhança | Opcional. Para serviços criados antes de 15 de julho de 2020, defina esta propriedade para optar pelo algoritmo de classificação BM25. |
sugestões | Especifica uma construção que armazena prefixos para correspondência em consultas parciais, como preenchimento automático e sugestões. |
scoringProfiles | Opcional. Usado para ajuste de relevância para consultas de texto completo. |
semântica | Opcional. Define os parâmetros de um índice de pesquisa que influenciam os recursos de pesquisa semântica. Uma configuração semântica é necessária para consultas semânticas. Para obter mais informações, consulte Criar uma consulta semântica. |
vectorSearch | Opcional. Define várias configurações de pesquisa vetorial. Apenas algoritmos de pesquisa vetorial podem ser configurados. |
normalizadores | Opcional. Normaliza a ordenação lexicográfica de strings, produzindo saída de classificação e filtragem que não diferenciam maiúsculas de minúsculas. |
analisadores, charFilters, tokenizers, tokenFilters | Opcional. Especifique essas seções do índice se estiver definindo analisadores personalizados. Por padrão, essas seções são nulas. |
defaultScoringProfile | Nome de um perfil de pontuação personalizado que substitui os comportamentos de pontuação padrão. |
corsOpções | Opcional. Usado para consultas de origem cruzada ao seu índice. |
encryptionKey | Opcional. Usado para criptografia extra do índice, por meio de chaves de criptografia gerenciadas pelo cliente (CMK) no Cofre de Chaves do Azure. Disponível para serviços de pesquisa faturáveis criados em ou após 2019-01-01. |
Resposta
Para uma solicitação de criação bem-sucedida, você verá o código de status "201 Criado". Por padrão, o corpo da resposta contém o JSON para a definição de índice que foi criada. No entanto, se o cabeçalho da solicitação Preferir estiver definido como return=minimal, o corpo da resposta estará vazio e o código de status de êxito será "204 Sem Conteúdo" em vez de "201 Criado". Isso é verdade independentemente de PUT ou POST ser usado para criar o índice.
Para uma solicitação de atualização bem-sucedida, você deve ver "204 Sem conteúdo". Por padrão, o corpo da resposta está vazio. No entanto, se o cabeçalho da solicitação Prefer
estiver definido como return=representation
, o corpo da resposta conterá o JSON para a definição de índice que foi atualizada. Nesse caso, o código de status de sucesso é "200 OK".
Exemplos
Exemplo: Vetor
A pesquisa vetorial é implementada no nível do campo. Esta definição coloca o foco nos campos vetoriais. Os campos vetoriais devem ser do tipo Collection(Edm.Single)
usados para armazenar valores de ponto flutuante de precisão única. Os campos vetoriais têm uma propriedade "dimensions" que contém o número de dimensões de saída suportadas pelo modelo de aprendizado de máquina usado para gerar incorporações. Por exemplo, se você estiver usando text-embedding-ada-002, o número máximo de dimensões de saída será 1536 por este documento. O "algorithmConfiguration" é definido como o nome da configuração "vectorSearch" no seu índice. Você pode definir vários no índice e, em seguida, especificar um por campo.
Muitos atributos se aplicam apenas a campos não vetoriais. Atributos como "filtrável", "classificável", "facetable", "analisador", "normalizador" e "synonymMaps" são ignorados para campos vetoriais. Da mesma forma, se você definir propriedades somente vetoriais, como "dimensions" ou "vectorSearchConfiguration" no campo que contém conteúdo alfanumérico, esses atributos serão ignorados.
{
"name": "{{index-name}}",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true,
"searchable": true,
"retrievable": true,
"filterable": true
},
{
"name": "titleVector",
"type": "Collection(Edm.Single)",
"key": false,
"searchable": true,
"retrievable": true,
"filterable": false,
"sortable": false,
"facetable": false,
"analyzer": "",
"searchAnalyzer": "",
"indexAnalyzer": "",
"normalizer": "",
"synonymMaps": "",
"dimensions": 1536,
"vectorSearchConfiguration": "my-vector-config"
},
{
"name": "contentVector",
"type": "Collection(Edm.Single)",
"key": false,
"searchable": true,
"retrievable": true,
"filterable": false,
"sortable": false,
"facetable": false,
"analyzer": "",
"searchAnalyzer": "",
"indexAnalyzer": "",
"normalizer": "",
"synonymMaps": "",
"dimensions": 1536,
"vectorSearchConfiguration": "my-vector-config"
}
],
"vectorSearch": {
"algorithmConfigurations": [
{
"name": "my-vector-config",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
]
}
}
Exemplo: coleções de campos com campos vetoriais e não vetoriais
A pesquisa vetorial é implementada no nível do campo. Para dar suporte a cenários de consulta híbrida, crie pares de campos para consultas vetoriais e não vetoriais. Os campos "title", "titleVector", "content", "contentVector" seguem esta convenção. Se você também quiser usar a pesquisa semântica, deverá ter campos de texto não vetoriais para esses comportamentos.
{
"name": "{{index-name}}",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true,
"filterable": true
},
{
"name": "title",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "category",
"type": "Edm.String",
"filterable": true,
"searchable": true,
"retrievable": true
},
{
"name": "titleVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchConfiguration": "my-vector-config"
},
{
"name": "contentVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchConfiguration": "my-vector-config"
}
],
"corsOptions": {
"allowedOrigins": [
"*"
],
"maxAgeInSeconds": 60
},
"vectorSearch": {
"algorithmConfigurations": [
{
"name": "my-vector-config",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
]
},
"semantic": {
"configurations": [
{
"name": "my-semantic-config",
"prioritizedFields": {
"titleField": {
"fieldName": "title"
},
"prioritizedContentFields": [
{
"fieldName": "content"
}
],
"prioritizedKeywordsFields": [
{
"fieldName": "category"
}
]
}
}
]
}
}
Exemplo: Um esquema de índice com campos simples e complexos
O primeiro exemplo mostra um esquema de índice completo com campos simples e complexos. Pelo menos um campo de cadeia de caracteres deve ter "key" definido como true.
{
"name": "hotels",
"fields": [
{ "name": "HotelId", "type": "Edm.String", "key": true, "filterable": true },
{ "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false },
{ "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
{ "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
{ "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
{ "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true, "analyzer": "tagsAnalyzer", "normalizer": "tagsNormalizer" },
{ "name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true },
{ "name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true },
{ "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },
{ "name": "Address", "type": "Edm.ComplexType",
"fields": [
{ "name": "StreetAddress", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "searchable": true },
{ "name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true, "normalizer": "lowercase" },
{ "name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
{ "name": "PostalCode", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
{ "name": "Country", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true }
]
},
{ "name": "Location", "type": "Edm.GeographyPoint", "filterable": true, "sortable": true },
{ "name": "Rooms", "type": "Collection(Edm.ComplexType)",
"fields": [
{ "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.lucene" },
{ "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.lucene" },
{ "name": "Type", "type": "Edm.String", "searchable": true },
{ "name": "BaseRate", "type": "Edm.Double", "filterable": true, "facetable": true },
{ "name": "BedOptions", "type": "Edm.String", "searchable": true },
{ "name": "SleepsCount", "type": "Edm.Int32", "filterable": true, "facetable": true },
{ "name": "SmokingAllowed", "type": "Edm.Boolean", "filterable": true, "facetable": true },
{ "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "facetable": true, "analyzer": "tagsAnalyzer", "normalizer": "tagsNormalizer" }
]
}
],
"suggesters": [ ],
"analyzers": [ ],
"normalizers": [ ],
"encryptionKey": [ ]
}
Exemplo: Sugestões
Um sugestão definição deve especificar campos de cadeia de caracteres "pesquisáveis" e "recuperáveis" (nas APIs REST, todos os campos simples são "retrievable": true
por padrão). Depois que um sugeridor é definido, você pode fazer referência a ele pelo nome em solicitações de consulta que usam o da API de Sugestões
{
"name": "hotels",
"fields": [
{ "name": "HotelId", "type": "Edm.String", "key": true, "filterable": true },
{ "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false },
{ "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
{ "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
{ "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
{ "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true, "analyzer": "tagsAnalyzer", "normalizer": "tagsNormalizer" },
{ "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },
],
"suggesters": [
{
"name": "sg",
"searchMode": "analyzingInfixMatching",
"sourceFields": ["HotelName", "Category", "Tags"]
}
]
}
Exemplo: Analisadores e normalizadores
Analisadores e normalizadores são referenciados em definições de campo e podem ser predefinidos ou personalizados. Se você estiver usando analisadores ou normalizadores personalizados, especifique-os no índice nas seções "analisadores" e "normalizadores".
O exemplo a seguir ilustra analisadores e normalizadores personalizados para "Tags". Ele também demonstra um normalizador predefinido (padrão) e analisador (en.microsoft) para "HotelName" e "Description", respectivamente.
{
"name": "hotels",
"fields": [
{ "name": "HotelId", "type": "Edm.String", "key": true, "filterable": true },
{ "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false, "normalizer": standard },
{ "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft"},
{ "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
{ "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
{ "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true, "analyzer": "tagsAnalyzer", "normalizer": "tagsNormalizer" },
{ "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },
],
"analyzers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "tagsAnalyzer",
"charFilters": [ "html_strip" ],
"tokenizer": "standard_v2"
}
],
"normalizers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomNormalizer",
"name": "tagsNormalizer",
"tokenFilters": [ "asciifolding", "lowercase" ]
}
]
}
Exemplo: Semelhança para relevância de pesquisa
Esta propriedade define o algoritmo de classificação usado para criar uma pontuação de relevância nos resultados de pesquisa de uma consulta de pesquisa de texto completo. Em serviços criados após 15 de julho de 2020, essa propriedade é ignorada porque o algoritmo de semelhança é sempre BM25. Para serviços existentes criados antes 15 de julho de 2020, você pode optar pelo BM25 definindo essa construção da seguinte maneira:
"similarity": {
"@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
}
Exemplo: Opções CORS
O JavaScript do lado do cliente não pode chamar nenhuma API por padrão, pois o navegador impede todas as solicitações de origem cruzada. Para permitir consultas de origem cruzada ao seu índice, habilite CORS (Cross-origin resource sharing (Wikipedia)) definindo o atributo corsOptions
. Por motivos de segurança, apenas as APIs de consulta suportam CORS.
{
"name": "hotels",
"fields": [ omitted for brevity ],
"suggesters": [ omitted for brevity ],
"analyzers": [ omitted for brevity ],
"corsOptions": (optional) {
"allowedOrigins": ["*"] | ["https://docs.microsoft.com:80", "https://azure.microsoft.com:80", ...],
"maxAgeInSeconds": (optional) max_age_in_seconds (non-negative integer)
}
}
Exemplo: chaves de criptografia com credenciais de acesso
As chaves de criptografia são chaves gerenciadas pelo cliente usadas para criptografia extra. Para obter mais informações, consulte Criptografia usando chaves gerenciadas pelo cliente no Azure Key Vault.
{
"name": "hotels",
"fields": [ omitted for brevity ],
"suggesters": [ omitted for brevity ],
"analyzers": [ omitted for brevity ],
"encryptionKey": (optional) {
"keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
"keyVaultKeyVersion": "Version of the Azure Key Vault key",
"keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key. An example URI might be https://my-keyvault-name.vault.azure.net",
"accessCredentials": (optional, only if not using managed system identity) {
"applicationId": "AAD Application ID that was granted access permissions to your specified Azure Key Vault",
"applicationSecret": "Authentication key of the specified AAD application)"
}
}
}
Exemplo: chaves de criptografia com identidade gerenciada
Você pode autenticar no Cofre da Chave do Azure usando uma identidade gerenciada atribuída pelo sistema ou pelo usuário (visualização). Nesse caso, omita as credenciais de acesso ou defina como null. O exemplo a seguir mostra uma identidade gerenciada atribuída pelo usuário. Para usar uma identidade gerenciada atribuída pelo sistema, omita credenciais de acesso e identidade. Desde que a identidade do sistema do seu serviço de pesquisa tenha permissões no Cofre da Chave do Azure, a solicitação de conexão deverá ser bem-sucedida.
{
"name": "hotels",
"fields": [ omitted for brevity ],
"suggesters": [ omitted for brevity ],
"analyzers": [ omitted for brevity ],
"encryptionKey": (optional) {
"keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
"keyVaultKeyVersion": "Version of the Azure Key Vault key",
"keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key. An example URI might be https://my-keyvault-name.vault.azure.net",
"accessCredentials": null,
"identity" : {
"@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
"userAssignedIdentity" : "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
}
}
}
Exemplo: Pontuação de perfis
Um perfil de pontuação é uma seção do esquema que define comportamentos de pontuação personalizados que permitem influenciar quais documentos aparecem mais acima nos resultados da pesquisa. Os perfis de pontuação são compostos por pesos de campo e funções. Para usá-los, especifique um perfil por nome na cadeia de caracteres de consulta. Para obter mais informações, consulte Adicionar perfis de pontuação a um índice de pesquisa (Azure AI Search REST API) obter detalhes.
{
"name": "hotels",
"fields": [ omitted for brevity ],
"suggesters": [ omitted for brevity ],
"analyzers": [ omitted for brevity ],
"scoringProfiles": [
{
"name": "name of scoring profile",
"text": (optional, only applies to searchable fields) {
"weights": {
"searchable_field_name": relative_weight_value (positive #'s),
...
}
},
"functions": (optional) [
{
"type": "magnitude | freshness | distance | tag",
"boost": # (positive number used as multiplier for raw score != 1),
"fieldName": "...",
"interpolation": "constant | linear (default) | quadratic | logarithmic",
"magnitude": {
"boostingRangeStart": #,
"boostingRangeEnd": #,
"constantBoostBeyondRange": true | false (default)
},
"freshness": {
"boostingDuration": "..." (value representing timespan leading to now over which boosting occurs)
},
"distance": {
"referencePointParameter": "...", (parameter to be passed in queries to use as reference location)
"boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)
},
"tag": {
"tagsParameter": "..." (parameter to be passed in queries to specify a list of tags to compare against target fields)
}
}
],
"functionAggregation": (optional, applies only when functions are specified)
"sum (default) | average | minimum | maximum | firstMatching"
}
]
}
Exemplo: Configurações semânticas
Uma configuração semântica é uma parte de uma definição de índice usada para configurar quais campos são utilizados pela pesquisa semântica para classificação, legendas, destaques e respostas. Para usar a pesquisa semântica, você deve especificar o nome de uma configuração semântica no momento da consulta. Para obter mais informações, consulte Criar uma consulta semântica.
{
"name": "hotels",
"fields": [ omitted for brevity ],
"suggesters": [ omitted for brevity ],
"analyzers": [ omitted for brevity ],
"semantic": {
"configurations": [
{
"name": "my-semantic-config",
"prioritizedFields": {
"titleField": {
"fieldName": "hotelName"
},
"prioritizedContentFields": [
{
"fieldName": "description"
},
{
"fieldName": "description_fr"
}
],
"prioritizedKeywordsFields": [
{
"fieldName": "tags"
},
{
"fieldName": "category"
}
]
}
}
]
}
}
Definições
Ligação | Descrição |
---|---|
corsOpções | Lista os domínios ou origens concedidos ao seu índice. |
defaultScoringProfile | Nome de um perfil de pontuação personalizado que substitui os comportamentos de pontuação padrão. |
encryptionKey | Configura uma conexão com o Cofre de Chaves do Azure para criptografia gerenciada pelo cliente. |
campos | Define definições e atributos de um campo em um índice de pesquisa. |
normalizadores | Configura um normalizador personalizado. Normaliza a ordenação lexicográfica de cadeias de caracteres, produzindo saídas de classificação, facetagem e filtragem que não diferenciam maiúsculas de minúsculas. |
semântica | Configura campos usados pela pesquisa semântica para classificação, legendas, destaques e respostas. |
scoringProfiles | Usado para ajuste de relevância para consultas de texto completo. |
semelhança | |
sugestões | Configura o armazenamento interno de prefixos para correspondência em consultas parciais, como preenchimento automático e sugestões. |
vectorSearch | Configura o algoritmo usado para campos vetoriais. |
corsOpções
O JavaScript do lado do cliente não pode chamar nenhuma API por padrão, pois o navegador impede todas as solicitações de origem cruzada. Para permitir consultas de origens cruzadas ao seu índice, habilite o CORS (Cross-Origin Resource Sharing) definindo o atributo "corsOptions". Por motivos de segurança, apenas as APIs de consulta suportam CORS.
Atributo | Descrição |
---|---|
allowedOrigens | Necessário. Uma lista delimitada por vírgulas das origens às quais é concedido acesso ao seu índice, onde cada origem é normalmente da forma protocol://<nome de domínio totalmente qualificado>:<porta> (embora a porta <> seja frequentemente omitida). Isso significa que qualquer código JavaScript servido a partir dessas origens tem permissão para consultar seu índice (supondo que ele forneça uma chave de API válida). Se quiser permitir o acesso a todas as origens, especifique * como um único item na matriz "allowedOrigins". Isso não é recomendado para produção, mas pode ser útil para desenvolvimento ou depuração. |
maxAgeInSeconds | Opcional. Os navegadores usam esse valor para determinar a duração (em segundos) para armazenar em cache as respostas de comprovação do CORS. Este deve ser um número inteiro não negativo. O desempenho melhora se esse valor for maior, mas esses ganhos são compensados pelo tempo necessário para que as alterações da política CORS entrem em vigor. Se não estiver definido, será utilizada uma duração predefinida de 5 minutos. |
defaultScoringProfile
Opcional. Uma cadeia de caracteres que é o nome de um perfil de pontuação personalizado definido no índice. Um perfil padrão é invocado sempre que um perfil personalizado não é explicitamente especificado na cadeia de caracteres de consulta. Para obter mais informações, consulte Adicionar perfis de pontuação a um índice de pesquisa.
encryptionKey [en]
Configura uma conexão com o Cofre de Chaves do Azure para chaves de criptografia (CMK) suplementares gerenciadas pelo cliente. Disponível para serviços de pesquisa faturáveis criados a partir de 1 de janeiro de 2019.
Uma conexão com o cofre de chaves deve ser autenticada. Você pode usar "accessCredentials" ou uma identidade gerenciada para essa finalidade.
As identidades gerenciadas podem ser atribuídas pelo sistema ou pelo usuário (visualização). Se o serviço de pesquisa tiver uma identidade gerenciada atribuída pelo sistema e uma atribuição de função que conceda acesso de leitura ao cofre de chaves, você poderá omitir "identity" e "accessCredentials", e a solicitação será autenticada usando a identidade gerenciada. Se o serviço de pesquisa tiver identidade atribuída pelo usuário e atribuição de função, defina a propriedade "identity" como a ID de recurso dessa identidade.
Atributo | Descrição |
---|---|
keyVaultKeyName | Necessário. Nome da chave do Cofre da Chave do Azure usada para criptografia. |
keyVaultKeyVersion | Necessário. Versão da chave do Cofre da Chave do Azure. |
keyVaultUri | Necessário. URI do Cofre da Chave do Azure (também conhecido como nome DNS) que fornece a chave. Um exemplo de URI pode ser https://my-keyvault-name.vault.azure.net |
accessCredenciais | Opcional. Omita essa propriedade se estiver usando uma identidade gerenciada. Caso contrário, as propriedades de "accessCredentials" incluem: "applicationId" (uma ID de Aplicativo do Azure Ative Directory que tem permissões de acesso ao seu Cofre de Chaves do Azure especificado). "applicationSecret" (a chave de autenticação do aplicativo do Azure AD especificado). |
identidade | Opcional, a menos que você esteja usando uma identidade gerenciada atribuída pelo usuário para a conexão do serviço de pesquisa com o Cofre da Chave do Azure. O formato é "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]" . |
campos
Contém informações sobre atributos em uma definição de campo.
Atributo | Descrição |
---|---|
Designação | Necessário. Define o nome do campo, que deve ser exclusivo dentro da coleção de campos do campo de índice ou pai. |
tipo | Necessário. Define o tipo de dados para o campo. Os campos podem ser simples ou complexos. Campos simples são de tipos primitivos, como Edm.String para texto ou Edm.Int32 para inteiros.
Campos complexos podem ter subcampos que são simples ou complexos. Isso permite que você modele objetos e matrizes de objetos, o que, por sua vez, permite que você carregue a maioria das estruturas de objeto JSON para seu índice.
Collection(Edm.Single) acomoda valores de ponto flutuante de precisão única. É usado apenas para campos vetoriais e é necessário. Consulte Tipos de dados suportados para obter a lista completa dos tipos suportados. |
chave | Necessário. Defina esse atributo como true para designar que os valores de um campo identificam exclusivamente documentos no índice. O comprimento máximo dos valores em um campo de chave é de 1024 caracteres. Exatamente um campo de nível superior em cada índice deve ser escolhido como o campo-chave e deve ser do tipo Edm.String . O padrão é false para campos simples e null para campos complexos.
Os campos-chave podem ser usados para pesquisar documentos diretamente e atualizar ou excluir documentos específicos. Os valores dos campos-chave são tratados de forma sensível a maiúsculas e minúsculas ao pesquisar ou indexar documentos. Consulte de Documentos de Pesquisa e Adicionar, Atualizar ou Excluir Documentos para obter detalhes. |
recuperável | Indica se o campo pode ser retornado em um resultado de pesquisa. Defina esse atributo como false se quiser usar um campo (por exemplo, margem) como filtro, classificação ou mecanismo de pontuação, mas não quiser que o campo fique visível para o usuário final. Esse atributo deve ser true para campos-chave e deve ser null para campos complexos. Este atributo pode ser alterado em campos existentes. A configuração recuperável para true não causa nenhum aumento nos requisitos de armazenamento de índice. O padrão é true para campos simples e null para campos complexos. |
pesquisável | Indica se o campo pode ser pesquisado em texto completo e pode ser referenciado em consultas de pesquisa. Isso significa que ele passa por análise lexical como quebra de palavras durante a indexação. Se você definir um campo pesquisável para um valor como "Sunny day", internamente ele será normalizado nos tokens individuais "sunny" e "day". Isso permite pesquisas de texto completo para esses termos. Os campos do tipo Edm.String ou Collection(Edm.String) são pesquisáveis por padrão. Esse atributo deve ser false para campos simples de outros tipos de dados não string, e deve ser null para campos complexos.
Um campo pesquisável consome espaço extra no seu índice, uma vez que o Azure AI Search processa o conteúdo desses campos e organiza-os em estruturas de dados auxiliares para pesquisa de desempenho. Se quiser economizar espaço no índice e não precisar de um campo para ser incluído nas pesquisas, defina pesquisável como false . Consulte Como funciona a pesquisa de texto completo no Azure AI Search para obter detalhes. |
filtrável | Indica se o campo deve ser referenciado em consultas $filter . Filtrável difere de pesquisável em como as cadeias de caracteres são manipuladas. Os campos do tipo Edm.String ou Collection(Edm.String) que são filtráveis não passam por análise lexical, portanto, as comparações são apenas para correspondências exatas. Por exemplo, se você definir essa f de campo como "Dia ensolarado", $filter=f eq 'sunny' não encontrará correspondências, mas $filter=f eq 'Sunny day' encontrará. Este atributo deve ser null para campos complexos. O padrão é true para campos simples e null para campos complexos. Para reduzir o tamanho do índice, defina esse atributo como false em campos nos quais você não estará filtrando. |
classificável | Indica se o campo deve ser referenciado em expressões $orderby . Por padrão, o Azure AI Search classifica os resultados por pontuação, mas, em muitas experiências, os usuários querem classificar por campos nos documentos. Um campo simples só pode ser classificado se tiver um único valor (tem um único valor no âmbito do documento principal).
Os campos de coleção simples não podem ser classificados, uma vez que são de vários valores. Subcampos simples de coleções complexas também são multivalorados e, portanto, não podem ser classificados. Isso é verdade se é um campo pai imediato, ou um campo ancestral, essa é a coleção complexa. Campos complexos não podem ser classificáveis e o atributo classificável deve ser null para esses campos. O padrão para classificável é true para campos simples de valor único, false para campos simples de vários valores e null para campos complexos. |
Mesa Rosto | Indica se o campo deve ser referenciado em consultas de facetas. Normalmente usado em uma apresentação de resultados de pesquisa que inclui contagem de visitas por categoria (por exemplo, pesquisar câmeras digitais e ver acessos por marca, por megapixels, por preço e assim por diante). Este atributo deve ser null para campos complexos. Os campos do tipo Edm.GeographyPoint ou Collection(Edm.GeographyPoint) não podem ser facial. O padrão é true para todos os outros campos simples. Para reduzir o tamanho do índice, defina esse atributo como false em campos que você não enfrentará. |
analisador | Define o analisador lexical para tokenizar cadeias de caracteres durante operações de indexação e consulta. Os valores válidos para esta propriedade incluem analisadores de linguagem , analisadores internose analisadores personalizados . O padrão é standard.lucene . Esse atributo só pode ser usado com campos pesquisáveis e não pode ser definido junto com searchAnalyzer ou indexAnalyzer. Uma vez que o analisador é escolhido e o campo é criado no índice, ele não pode ser alterado para o campo. Deve ser null para campos complexos. |
searchAnalyzer | Defina essa propriedade junto com o indexAnalyzer para especificar diferentes analisadores lexicais para indexação e consultas. Se você usar essa propriedade, defina o analyzer como null e verifique se indexAnalyzer está definido como um valor permitido. Os valores válidos para esta propriedade incluem analisadores internos e analisadores personalizados. Este atributo só pode ser usado com campos pesquisáveis. O analisador de pesquisa pode ser atualizado em um campo existente, uma vez que é usado apenas no momento da consulta. Deve ser null para campos complexos. |
indexAnalyzer | Defina essa propriedade junto com searchAnalyzer para especificar diferentes analisadores lexicais para indexação e consultas. Se você usar essa propriedade, defina o analyzer como null e verifique se searchAnalyzer está definido como um valor permitido. Os valores válidos para esta propriedade incluem analisadores internos e analisadores personalizados. Este atributo só pode ser usado com campos pesquisáveis. Uma vez que o analisador de índice é escolhido, ele não pode ser alterado para o campo. Deve ser null para campos complexos. |
normalizador | Define o normalizador para operações de filtragem, classificação e facetagem. Pode ser o nome de um normalizador predefinido ou um normalizador personalizado definido dentro do índice. O padrão é null , o que resulta em uma correspondência exata no texto textual não analisado. Esse atributo só pode ser usado com campos Edm.String e Collection(Edm.String) que tenham pelo menos um dos campos filtrável, classificável ou facetable definido como true. Um normalizador só pode ser definido no campo quando adicionado ao índice e não pode ser alterado posteriormente. Deve ser null para campos complexos. Os valores válidos para um normalizador predefinido incluem: standard - Texto em minúsculas seguido de asciifolding.
lowercase - Transforma caracteres em minúsculas.
uppercase - Transforma caracteres em maiúsculas.
asciifolding - Transforma caracteres que não estão no bloco Unicode Latino Básico para seu equivalente ASCII, se existir. Por exemplo, alterar "à" para "a".
elision - Remove a elisão do início dos tokens. |
synonymMapas | Uma lista dos nomes dos mapas de sinónimos a associar a este campo. Este atributo só pode ser usado com campos pesquisáveis. Atualmente, apenas um mapa de sinônimo por campo é suportado. A atribuição de um mapa de sinônimo a um campo garante que os termos de consulta direcionados a esse campo sejam expandidos no momento da consulta usando as regras no mapa de sinônimos. Este atributo pode ser alterado em campos existentes. Deve ser null ou uma coleção vazia para campos complexos. |
campos | Uma lista de subcampos, se este for um campo do tipo Edm.ComplexType ou Collection(Edm.ComplexType) . Deve estar null ou vazio para campos simples. Consulte Como modelar tipos de dados complexos no Azure AI Search para obter mais informações sobre como e quando usar subcampos. |
Dimensões | Inteiro. Obrigatório para campos vetoriais. **Isso deve corresponder ao tamanho de incorporação de saída do seu modelo de incorporação. Por exemplo, para um modelo OpenAI popular do Azure text-embedding-ada-002 , suas dimensões de saída são 1536, portanto, essas seriam as dimensões a serem definidas para esse campo vetorial. O atributo dimensions tem um mínimo de 2 e um máximo de 2048 valores de ponto flutuante cada. |
vectorSearchConfiguration | Necessário para definições de campo vetorial. Especifica o nome do configuração do algoritmo "vectorSearch" usado pelo campo vetorial. Depois que o campo é criado, você não pode alterar o nome do vectorSearchConfiguration, mas pode alterar as propriedades da configuração do algoritmo no índice. Isso permite ajustes no tipo de algoritmo e parâmetros. |
Observação
Os campos do tipo Edm.String
que são filtráveis, classificáveis ou facáveis podem ter, no máximo, 32 kilobytes de comprimento. Isso ocorre porque os valores desses campos são tratados como um único termo de pesquisa e o comprimento máximo de um termo na Pesquisa do Azure AI é de 32 kilobytes. Se você precisar armazenar mais texto do que isso em um único campo de cadeia de caracteres, precisará definir explicitamente filtrável, classificável e facetable para false
em sua definição de índice.
Definir um campo como pesquisável, filtrável, classificável ou facial tem um impacto no tamanho do índice e no desempenho da consulta. Não defina esses atributos em campos que não devem ser referenciados em expressões de consulta.
Se um campo não estiver definido para ser pesquisável, filtrável, classificável ou facial, o campo não poderá ser referenciado em nenhuma expressão de consulta. Isso é útil para campos que não são usados em consultas, mas são necessários nos resultados da pesquisa.
normalizadores
Define um normalizador personalizado
Atributo | Descrição |
---|---|
Designação | Necessário. Campo de cadeia de caracteres que especifica um normalizador personalizado definido pelo usuário. |
charFiltros | Usado em um normalizador personalizado. Pode ser um ou mais dos filtros de caracteres disponíveis suportados para uso em um normalizador personalizado: mapeamento pattern_replace |
tokenFiltros | Usado em um normalizador personalizado. Pode ser um ou mais dos |
pontuaçãoPerfis
Os perfis de pontuação aplicam-se à pesquisa de texto completo. Um perfil é definido em um índice e especifica a lógica personalizada que pode atribuir pontuações de pesquisa mais altas a documentos correspondentes que atendem aos critérios definidos no perfil. Você pode criar vários perfis de pontuação e, em seguida, atribuir o que deseja a uma consulta.
Se você criar um perfil personalizado, poderá torná-lo padrão definindo defaultScoringProfile
. Para obter mais informações, consulte Adicionar perfis de pontuação a um índice de pesquisa.
semântica
Uma configuração semântica é uma parte de uma definição de índice usada para configurar quais campos são utilizados pela pesquisa semântica para classificação, legendas, destaques e respostas. As configurações semânticas são compostas por um campo de título, campos de conteúdo priorizado e campos de palavra-chave priorizados. Pelo menos um campo precisa ser especificado para cada uma das três subpropriedades (titleField, priorizdKeywordsFields e priorizdContentFields). Qualquer campo do tipo Edm.String
ou Collection(Edm.String)
pode ser usado como parte de uma configuração semântica.
Para usar a pesquisa semântica, você deve especificar o nome de uma configuração semântica no momento da consulta. Para obter mais informações, consulte Criar uma consulta semântica.
{
"name": "hotels",
"fields": [ omitted for brevity ],
"suggesters": [ omitted for brevity ],
"analyzers": [ omitted for brevity ],
"semantic": {
"configurations": [
{
"name": "name of the semantic configuration",
"prioritizedFields": {
"titleField": {
"fieldName": "..."
},
"prioritizedContentFields": [
{
"fieldName": "..."
},
{
"fieldName": "..."
}
],
"prioritizedKeywordsFields": [
{
"fieldName": "..."
},
{
"fieldName": "..."
}
]
}
}
]
}
}
Atributo | Descrição |
---|---|
Designação | Necessário. O nome da configuração semântica. |
campos priorizados | Necessário. Descreve os campos de título, conteúdo e palavra-chave a serem usados para classificação semântica, legendas, destaques e respostas. Pelo menos uma das três subpropriedades (titleField, priorizdKeywordsFields e priorizdContentFields) precisa ser definida. |
priorizdFields.titleField | Define o campo de título a ser usado para classificação semântica, legendas, destaques e respostas. Se não tiver um campo de título no índice, deixe-o em branco. |
priorizdFields.prioritizedContentFields | Define os campos de conteúdo a serem usados para classificação semântica, legendas, destaques e respostas. Para obter o melhor resultado, os campos selecionados devem conter texto em linguagem natural. A ordem dos campos na matriz representa sua prioridade. Os campos com prioridade mais baixa podem ficar truncados se o conteúdo for longo. |
priorizdFields.priorizdKeywordsFields | Define os campos de palavra-chave a serem usados para classificação semântica, legendas, destaques e respostas. Para obter o melhor resultado, os campos selecionados devem conter uma lista de palavras-chave. A ordem dos campos na matriz representa sua prioridade. Os campos com prioridade mais baixa podem ficar truncados se o conteúdo for longo. |
semelhança
Propriedade opcional que se aplica a serviços criados antes de 15 de julho de 2020. Para esses serviços, você pode definir essa propriedade para usar o algoritmo de classificação BM25 que foi introduzido em julho de 2020. Os valores válidos incluem "#Microsoft.Azure.Search.ClassicSimilarity"
(o padrão anterior) ou "#Microsoft.Azure.Search.BM25Similarity"
.
Para todos os serviços criados após julho de 2020, a definição desta propriedade não tem efeito. Todos os serviços mais recentes usam o BM25 como o único algoritmo de classificação para pesquisa de texto completo. Para obter mais informações, consulte Algoritmos de classificação no Azure AI Search.
sugestões
Especifica uma construção que armazena prefixos para correspondência em consultas parciais, como preenchimento automático e sugestões.
Atributo | Descrição |
---|---|
Designação | Necessário. O nome do sugestionador. |
sourceFields | Necessário. Um ou mais campos de cadeia de caracteres para os quais você está habilitando o preenchimento automático ou resultados sugeridos. |
searchMode | Obrigatório e sempre definido como analyzingInfixMatching . Ele especifica que a correspondência ocorre em qualquer termo na cadeia de caracteres de consulta. |
pesquisa vetorial
O objeto vectorSearch permite a configuração de propriedades de pesquisa vetorial. Apenas as configurações de algoritmo podem ser configuradas atualmente. Isso permite a configuração do tipo de algoritmo e parâmetros de algoritmo usados para campos vetoriais. Você pode ter várias configurações. Quaisquer configurações referenciadas por um campo vetorial não podem ser modificadas nem excluídas. Quaisquer configurações que não sejam referenciadas podem ser modificadas ou excluídas. Uma definição de campo vetorial (na coleção fields) deve especificar qual configuração do algoritmo de pesquisa vetorial (através da propriedade vectorSearchConfiguration
) que o campo está usando.
"vectorSearch": {
"algorithmConfigurations": [
{
"name": "my-vector-config",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
]
}
Atributo | Descrição |
---|---|
Designação | Necessário. O nome da configuração do algoritmo. |
tipo | O tipo de algoritmo a ser usado. Apenas '"hnsw"' é suportado, que é o algoritmo Hierarchical Navigable Small World (HNSW). |
hnswParâmetros | Opcional. Parâmetros para o algoritmo "hnsw". Se esse objeto for omitido, os valores padrão serão usados. |
hnswParâmetros
Este objeto contém as personalizações para hnsw
parâmetros de algoritmo. Todas as propriedades são opcionais e os valores padrão são usados se algum for omitido.
Atributo | Descrição |
---|---|
Métrica | String. A métrica de semelhança a ser usada para comparações vetoriais. Para hnsw , os valores permitidos são "cosseno", "euclidiano" e "dotProduct". O valor padrão é "cosine". |
m | Inteiro. O número de ligações bidirecionais criadas para cada novo elemento durante a construção. O padrão é 4. O intervalo permitido é de 4 a 10. Valores maiores levam a gráficos mais densos, melhorando o desempenho da consulta, mas exigem mais memória e computação. |
efConstrução | Inteiro. O tamanho da lista dinâmica para os vizinhos mais próximos usados durante a indexação. O padrão é 400. O intervalo permitido é de 100 a 1000.Valores maiores levam a uma melhor qualidade do índice, mas exigem mais memória e computação. |
efSearch | Inteiro. O tamanho da lista dinâmica que contém os vizinhos mais próximos, que é usada durante o tempo de pesquisa. O padrão é 500. O intervalo permitido é de 100 a 1000. Aumentar esse parâmetro pode melhorar os resultados da pesquisa, mas diminui o desempenho da consulta. |
Como efSearch
é um parâmetro de tempo de consulta, esse valor pode ser atualizado mesmo se um campo existente estiver usando uma configuração de algoritmo.