Criar ou atualizar índice (Versão prévia da API REST)

Aplica-se a: 2023-07-01-Preview, 2021-04-30-Preview, 2020-06-30-Preview

Importante

2023-07-01-Preview adiciona pesquisa de vetor.

  • Objeto "vectorSearch ", uma configuração das configurações de pesquisa de vetor. Aplica-se somente a algoritmos de pesquisa de vetor.
  • Tipo de dados "Collection(Edm.Single)", necessário para um campo de vetor. Representa um número de ponto flutuante de precisão única como o tipo primitivo.
  • Propriedade "dimensions", necessária para um campo de vetor. Representa a dimensionalidade de suas inserções de vetor.
  • Propriedade "vectorSearchConfiguration ", necessária para um campo de vetor. Seleciona a configuração do algoritmo para este campo.

2021-04-30-Preview adiciona:

  • "semanticConfiguration" usado para escopo de classificação semântica para campos específicos.
  • "identity", em "encryptionKey", usada para recuperar uma chave de criptografia gerenciada pelo cliente do Azure Key Vault usando uma identidade gerenciada atribuída pelo usuário.

2020-06-30-Preview adiciona:

  • "normalizadores", usado para insensibilidade de 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 campo, tipos de dados e atributos), mas também outros constructos (sugestores, perfis de pontuação e configuração 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 de 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 ele já existir, ele será atualizado para a nova definição.

A criação de um índice estabelece o esquema e os metadados. Popular o índice é uma operação separada. Para esta etapa, você pode usar um indexador (consulte Operações do indexador, disponíveis para fontes de dados com suporte) ou Adicionar, Atualizar ou Excluir Documentos. O número máximo de índices que você pode criar varia de acordo com a faixa de preços. Dentro de cada índice, há limites para elementos individuais. Para obter mais informações, consulte Limites de serviço para o Azure AI Search.

A atualização de um índice existente deve incluir a definição de esquema completa, incluindo todas as 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á-la e atualizá-la com PUT.

Como um índice existente contém conteúdo, muitas modificações de índice exigem uma queda de índice e recompilação. As seguintes alterações de esquema são uma exceção a esta regra:

  • Adicionando novos campos

  • Adicionar ou alterar perfis de pontuação

  • Adicionar ou alterar configurações semânticas

  • Alterando as opções do CORS

  • Alterando os 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ônimoMap usado no momento da consulta (synonymMaps)

Para fazer qualquer uma das alterações de esquema acima em um índice existente, especifique o nome do índice no URI de 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 das duas coisas ocorra: um valor é fornecido para o novo campo (usando mesclagem) ou novos documentos são adicionados.

Atualizações a um suggester têm restrições semelhantes: novos campos podem ser adicionados a um suggester ao mesmo tempo que os campos são adicionados, mas os campos existentes não podem ser removidos nem adicionados a suggesters sem uma recompilação de índice.

Atualizações a um analisador, um tokenizer, um filtro de token ou um filtro char não são permitidos. Novas podem ser criadas com as alterações desejadas, mas você deve deixar o índice offline ao adicionar as novas definições do analisador. Definir o allowIndexDowntime sinalizador 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 deixa 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 novamente online e pronto para lidar com solicitações.

Parâmetros de URI

Parâmetro Descrição
nome do serviço Obrigatórios. Defina esse valor como o nome exclusivo definido pelo usuário do serviço de pesquisa.
nome do índice Necessário no URI se estiver usando PUT. O nome deve ser minúsculo, começar com uma letra ou número, não ter barras ou pontos e ter menos de 128 caracteres. Traços não podem ser consecutivos.
api-version Obrigatórios. A versão prévia atual é 2023-07-23-preview. Consulte Versões de API para obter mais versões.
allowIndexDowntime Opcional. Falso por padrão. Defina como true para determinadas atualizações, como adicionar ou modificar um analisador, um tokenizer, um filtro de token, um filtro char ou uma propriedade de similaridade. O índice é colocado offline durante a atualização, geralmente não mais do que vários segundos.

Cabeçalhos de solicitação

A tabela a seguir descreve os cabeçalhos de solicitação necessários e opcionais

Campos Descrição
Tipo de conteúdo Obrigatórios. Defina esse valor como application/json
chave de 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 para o serviço de pesquisa. As solicitações de criação devem incluir um api-key cabeçalho definido como sua chave de administrador (em vez de uma chave de consulta). Confira Conectar-se ao Azure AI Search usando a autenticação de chave para obter detalhes.

Corpo da solicitação

O corpo da solicitação contém uma definição de esquema, que inclui a lista de campos de dados dentro de documentos que são alimentados nesse índice.

O JSON a seguir é uma representação de alto nível de um esquema que dá suporte à pesquisa de vetor. Um esquema requer um campo de chave e esse campo de chave pode ser pesquisável, filtreável, classificável e facetável.

Um campo de pesquisa de vetor é do tipo Collection(Edm.Single). Como os campos vetoriais não são textuais, um campo de vetor não pode ser usado como uma chave e não aceita analisadores, normalizadores, sugestores ou sinônimos. Ele deve ter uma propriedade "dimensions" e uma propriedade "vectorSearchConfiguration".

Um esquema que dá suporte à pesquisa de vetor também pode dar suporte à pesquisa de palavra-chave. Outros campos não coletores no índice podem usar 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) { }  
}  

A contém as seguintes propriedades:

Propriedade Descrição
name Obrigatórios. O nome do índice. Um nome de índice deve conter apenas letras minúsculas, dígitos ou traços, não pode iniciar ou terminar com traços e é limitado a 128 caracteres.
descrição Uma descrição opcional.
campos Uma coleção de campos para esse índice, em que cada campo tem um nome, um tipo de dados com suporte que está em conformidade com o EDM (Modelo de Dados de Entidade) 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". Esse 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 essa propriedade para aceitar o algoritmo de classificação BM25.
sugestores Especifica um constructo que armazena prefixos para correspondência em consultas parciais, como preenchimento automático e sugestões.
scoreProfiles 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 de vetor. Somente algoritmos de pesquisa de vetor podem ser configurados.
normalizadores Opcional. Normaliza a ordenação lexicográfica de cadeias de caracteres, produzindo classificação e filtragem sem diferenciação de maiúsculas e minúsculas.
analisadores, charFilters, tokenizers, tokenFilters Opcional. Especifique estas seções do índice se você 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.
corsOptions Opcional. Usado para consultas entre origens no índice.
encryptionKey Opcional. Usado para criptografia extra do índice, por meio de CMK (chaves de criptografia gerenciadas pelo cliente) no Azure Key Vault. Disponível para serviços de pesquisa faturáveis criados em ou após 01-01/2019.

Resposta

Para uma solicitação de criação bem-sucedida, você deverá ver status código "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 Preferir solicitação estiver definido como return=minimal, o corpo da resposta estará vazio e o êxito status código será "204 Sem Conteúdo" em vez de "201 Criado". Isso é verdadeiro independentemente de a operação PUT ou POST ser usada para criar o índice.

Para uma solicitação de atualização bem-sucedida, você deverá ver "204 Sem Conteúdo". Por padrão, o corpo da resposta está vazio. No entanto, se o cabeçalho da Prefer solicitação for definido como return=representation, o corpo da resposta conterá o JSON para a definição de índice que foi atualizada. Nesse caso, o êxito status código é "200 OK".

Exemplos

Exemplo: Vetor

A pesquisa de vetor é implementada no nível do campo. Essa definição coloca o foco nos campos de vetor. Os campos de vetor devem ser do tipo Collection(Edm.Single) usado para armazenar valores de ponto flutuante de precisão única. Os campos de vetor têm uma propriedade "dimensões" que contém o número de dimensões de saída compatíveis com o modelo de machine learning usado para gerar inserçõ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" em seu índice. Você pode definir vários no índice e, em seguida, especificar um por campo.

Muitos atributos se aplicam somente a campos não vetoriais. Atributos como "filterable", "sortable", "facetable", "analyzer", "normalizer" e "synonymMaps" são ignorados para campos vetoriais. Da mesma forma, se você definir propriedades somente vetoriais como "dimensões" 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 vetor e não vetor

A pesquisa de vetor é 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 criptografados 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 "chave" definida 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: Sugestores

Uma definição de sugestor 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 sugestor for definido, você poderá referenciá-lo por nome em solicitações de consulta que usam a API de Sugestões ou a API de Preenchimento Automático, dependendo se você deseja retornar uma correspondência ou o restante de um termo de consulta.

{
  "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 personalizados ou normalizadores, especifique-os no índice nas seções "analisadores" e "normalizadores".

O exemplo a seguir ilustra analisadores personalizados e normalizadores para "Marcas". Ele também demonstra um normalizador predefinido (padrão) e um 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: similaridade para relevância de pesquisa

Essa propriedade define o algoritmo de classificação usado para criar uma pontuação de relevância nos resultados da 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 similaridade é sempre BM25. Para serviços existentes criados antes de 15 de julho de 2020, você pode aceitar o BM25 definindo esse constructo da seguinte maneira:

 "similarity": {
     "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
 }

Exemplo: Opções de CORS

O JavaScript do lado do cliente não pode chamar nenhuma APIs por padrão, pois o navegador impede todas as solicitações entre origens. Para permitir consultas entre origens para seu índice, habilite CORS (Compartilhamento de recursos entre origens (Wikipédia)) definindo o corsOptions atributo. Por motivos de segurança, apenas APIs de consulta dão suporte para 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

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 Azure Key Vault usando uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário (versão prévia). Nesse caso, omita as credenciais de acesso ou defina como nulo. 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 serviço de pesquisa tenha permissões no Azure Key Vault, 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: Perfis de Pontuação

Um perfil de pontuação é uma seção do esquema que define comportamentos de pontuação personalizados que permitem influenciar quais documentos aparecem mais alto nos resultados da pesquisa. Perfis de pontuação são compostos de funções e pesos de campos. Para usá-las, você pode especificar um perfil por nome na sequência de consulta. Para obter mais informações, consulte Adicionar perfis de pontuação a um índice de pesquisa (API REST da Pesquisa de IA do Azure) para 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 faz parte de uma definição de índice usada para configurar quais campos são utilizados pela pesquisa semântica para classificação, legendas, realces 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

Link Descrição
corsOptions Lista os domínios ou origens que são concedidos ao í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 Azure Key Vault 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 classificação, faceta e saída de filtragem que não diferenciam maiúsculas de minúsculas.
semântica Configura campos usados pela pesquisa semântica para classificação, legendas, realces e respostas.
scoringProfiles Usado para ajuste de relevância para consultas de texto completo.
Semelhança
sugestores Configura o armazenamento de prefixo interno para correspondência em consultas parciais, como preenchimento automático e sugestões.
vectorSearch Configura o algoritmo usado para campos de vetor.

corsOptions

O JavaScript do lado do cliente não pode chamar nenhuma APIs por padrão, pois o navegador impede todas as solicitações entre origens. Para permitir consultas entre origens para seu índice, habilite CORS (Compartilhamento de Recursos entre Origens) definindo o atributo "corsOptions". Por motivos de segurança, apenas APIs de consulta dão suporte para CORS.

Atributo Descrição
allowedOrigins Obrigatórios. Uma lista delimitada por vírgulas de origens que recebem acesso ao seu índice, em que cada origem normalmente é do formulário protocol://< desemitidamente qualificado-nome-do-domínio>:<porta> (embora a <porta> geralmente seja omitida). Isso significa que qualquer código JavaScript fornecido dessas origens tem permissão para consultar seu índice (supondo que ele forneça uma chave de API válida). Se você 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 CORS de simulação. Esse deve ser um inteiro não negativo. O desempenho melhora se esse valor for maior, mas esses ganhos serão compensados pela quantidade de tempo necessária para que as alterações na política do CORS entrem em vigor. Se não estiver definido, uma duração padrão de 5 minutos será usada.

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 é especificado explicitamente na cadeia de caracteres de consulta. Para obter mais informações, consulte Adicionar perfis de pontuação a um índice de pesquisa.

encryptionKey

Configura uma conexão com o Key Vault do Azure para CMK (chaves de criptografia gerenciadas pelo cliente) complementares. Disponível para serviços de pesquisa faturáveis criados em ou após 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 (versão prévia). 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 "identidade" 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 do recurso dessa identidade.

Atributo Descrição
keyVaultKeyName Obrigatórios. Nome da chave de Key Vault do Azure usada para criptografia.
keyVaultKeyVersion Obrigatórios. Versão da chave de Key Vault do Azure.
keyVaultUri Obrigatórios. URI do Azure Key Vault (também conhecido como nome DNS) que fornece a chave. Um exemplo de URI pode ser https://my-keyvault-name.vault.azure.net
accessCredentials Opcional. Omita essa propriedade se você estiver usando uma identidade gerenciada. Caso contrário, as propriedades de "accessCredentials" incluem:
"applicationId" (uma ID de aplicativo do Azure Active Directory que tem permissões de acesso para o Azure Key Vault especificado).
"applicationSecret" (a chave de autenticação do aplicativo 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 Azure Key Vault. O formato é "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]".

fields

Contém informações sobre atributos em uma definição de campo.

Atributo Descrição
name Obrigatórios. Define o nome do campo , que deve ser exclusivo dentro da coleção de campos do índice ou campo pai.
type Obrigatórios. Define o tipo de dados do 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 modelar objetos e matrizes de objetos, o que, por sua vez, permite carregar a maioria das estruturas de objeto JSON no índice. Collection(Edm.Single) acomoda valores de ponto flutuante de precisão única. Ele é usado apenas para campos de vetor e é necessário. Consulte Tipos de dados com suporte para obter a lista completa de tipos com suporte.
chave Obrigatórios. Defina esse atributo como true para designar que os valores de um campo identifiquem documentos exclusivamente no índice. O comprimento máximo de 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 de chave e deve ser do tipo Edm.String. O padrão é false para campos simples e null para campos complexos.

Os campos de chave podem ser usados para pesquisar documentos diretamente e atualizar ou excluir documentos específicos. Os valores dos campos de chave são tratados de maneira que diferencia maiúsculas de minúsculas ao pesquisar ou indexar documentos. Consulte Pesquisar Documento e Adicionar, Atualizar ou Excluir Documentos para obter detalhes.
retrievable Indica se o campo pode ser retornado em um resultado de pesquisa. Defina esse atributo false como se você quiser usar um campo (por exemplo, margem) como um 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 de chave e deve ser null para campos complexos. Esse atributo pode ser alterado em campos existentes. A configuração recuperável como true não causa nenhum aumento nos requisitos de armazenamento de índice. O padrão é true para campos simples e null para campos complexos.
searchable Indica se o campo é pesquisável em texto completo e pode ser referenciado em consultas de pesquisa. Isso significa que ele passa por uma análise lexical , como quebra de palavras durante a indexação. Se você definir um campo pesquisável para um valor como "Dia ensolarado", internamente ele será normalizado nos tokens individuais "ensolarado" e "dia". Isso habilita pesquisas de texto completo para esses termos. 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ãostring e deve ser null para campos complexos.

Um campo pesquisável consome espaço extra em seu índice, pois o Azure AI Search processa o conteúdo desses campos e os organiza em estruturas de dados auxiliares para pesquisa de desempenho. Se você quiser economizar espaço em seu índice e não precisar que um campo seja incluído nas pesquisas, defina pesquisável como false. Confira Como funciona a pesquisa de texto completo na Pesquisa de IA do Azure para obter detalhes.
filterable Indica se o campo deve ser referenciado em $filter consultas. Filterable difere do pesquisável em como as cadeias de caracteres são tratadas. Campos do tipo Edm.String ou Collection(Edm.String) que são filtres não passam por análise lexical, portanto, as comparações são apenas para correspondências exatas. Por exemplo, se você definir esse campo f como "Dia ensolarado", $filter=f eq 'sunny' não encontrará correspondências, mas $filter=f eq 'Sunny day' o fará. Esse 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 filtrará.
sortable Indica se o campo deve ser referenciado em $orderby expressões. Por padrão, a Pesquisa de IA do Azure classifica os resultados por pontuação, mas em muitas experiências os usuários desejam classificar por campos nos documentos. Um campo simples só poderá ser classificado se for de valor único (ele tem um único valor no escopo do documento pai).

Campos de coleção simples não podem ser classificados, pois são de vários valores. Subcampos simples de coleções complexas também são de vários valores e, portanto, não podem ser classificados. Isso é verdade se é um campo pai imediato ou um campo ancestral, que é 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 com valores múltiplos e null para campos complexos.
facetable Indica se o campo deve ser referenciado em consultas de faceta. Normalmente usado em uma apresentação de resultados de pesquisa que inclui contagem de ocorrências por categoria (por exemplo, pesquise câmeras digitais e veja ocorrências por marca, por megapixels, por preço e assim por diante). Esse atributo deve ser null para campos complexos. Campos do tipo Edm.GeographyPoint ou Collection(Edm.GeographyPoint) não podem ser facetas. O padrão é true para todos os outros campos simples. Para reduzir o tamanho do índice, defina esse atributo como false em campos nos quais você não estará enfrentando.
Analyzer Define o analisador lexical para tokenizar cadeias de caracteres durante operações de indexação e consulta. Os valores válidos para essa propriedade incluem analisadores de linguagem, analisadores internos e 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. Depois 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 indexAnalyzer para especificar diferentes analisadores léxicos para indexação e consultas. Se você usar essa propriedade, defina o analisador como null e verifique se indexAnalyzer está definido como um valor permitido. Os valores válidos para essa propriedade incluem analisadores internos e analisadores personalizados. Esse atributo só pode ser usado com campos pesquisáveis. O analisador de pesquisa pode ser atualizado em um campo existente, pois ele só é usado em tempo de consulta. Deve ser null para campos complexos.
indexAnalyzer Defina essa propriedade junto com searchAnalyzer para especificar diferentes analisadores léxicos para indexação e consultas. Se você usar essa propriedade, defina analyzer como null e verifique se searchAnalyzer está definido como um valor permitido. Os valores válidos para essa propriedade incluem analisadores internos e analisadores personalizados. Esse atributo só pode ser usado com campos pesquisáveis. Depois que o analisador de índice for escolhido, ele não poderá ser alterado para o campo. Deve ser null para campos complexos.
Normalizer Define o normalizador para operações de filtragem, classificação e facetagem. Pode ser o nome de um normalizador predefinido ou de um normalizador personalizado definido no índice. O padrão é null, que resulta em uma correspondência exata em texto text não analisado. Esse atributo só pode ser usado com Edm.String campos e Collection(Edm.String) que têm pelo menos um dos campos filtráveis, classificáveis ou facetas definidos 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– Reduz o texto seguido de asciifolding.
lowercase– Transforma caracteres em letras 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 houver. Por exemplo, alterando "à" para "a".
elision– Remove a elisão do início dos tokens.
synonymMaps Uma lista dos nomes dos mapas de sinônimos a serem associados a esse campo. Esse atributo só pode ser usado com campos pesquisáveis. Atualmente, há suporte para apenas um mapa de sinônimos por campo. Atribuir um mapa de sinônimos a um campo garante que os termos de consulta direcionados a esse campo sejam expandidos em tempo de consulta usando as regras no mapa de sinônimos. Esse atributo pode ser alterado em campos existentes. Deve ser null ou uma coleção vazia para campos complexos.
fields 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 How to model complex data types in Azure AI Search for more information on how and when to use subfields.
dimensions Inteiro. Necessário para campos de vetor. **Isso deve corresponder ao tamanho de inserção de saída do modelo de inserção. Por exemplo, para um modelo text-embedding-ada-002popular do Azure OpenAI, suas dimensões de saída são 1536, portanto, essas seriam as dimensões a serem definidas para esse campo de vetor. O atributo dimensões tem um mínimo de dois e um máximo de 2048 valores de ponto flutuante cada.
vectorSearchConfiguration Necessário para definições de campo de vetor. Especifica o nome da configuração do algoritmo "vectorSearch" usada pelo campo vetor. 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 nos parâmetros.

Observação

Campos do tipo Edm.String que podem ser filtrados, classificáveis ou facetáveis podem ter no máximo 32 quilobytes 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 no Azure AI Search é de 32 quilobytes. Se você precisar armazenar mais texto do que isso em um único campo de cadeia de caracteres, precisará definir explicitamente filtre, classificável e facetável como false em sua definição de índice.

Definir um campo como pesquisável, filtreável, classificável ou faceta 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 como pesquisável, filtreável, classificável ou faceta, 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 que tem uma combinação definida pelo usuário de filtros de caractere e filtros de token. Depois de definir um normalizador personalizado no índice, você pode especificá-lo por nome em uma definição de campo.

Atributo Descrição
name Obrigatórios. Campo de cadeia de caracteres que especifica um normalizador personalizado definido pelo usuário.
charFilters Usado em um normalizador personalizado. Pode ser um ou mais filtros de caracteres disponíveis com suporte para uso em um normalizador personalizado:
mapeamento
pattern_replace
tokenFilters Usado em um normalizador personalizado. Ele pode ser um oumais dos inclinadores de token disponíveis com suporte para uso em um normalizador personalizado:
arabic_normalization


cjk_widthelisão
german_normalization hindi_normalization
indic_normalization
persian_normalization
scandinavian_normalization
scandinavian_folding

sorani_normalization
minúsculas
maiúsculas

scoreProfiles

Os perfis de pontuação se aplicam à pesquisa de texto completo. Um perfil é definido em um índice e especifica uma lógica personalizada que pode atribuir pontuações de pesquisa mais altas a documentos correspondentes que atendam aos critérios definidos no perfil. Você pode criar vários perfis de pontuação e atribuir aquele que deseja a uma consulta.

Se você criar um perfil personalizado, poderá torná-lo o 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 faz parte de uma definição de índice usada para configurar quais campos são utilizados pela pesquisa semântica para classificação, legendas, realces e respostas. As configurações semânticas são compostas por um campo de título, campos de conteúdo priorizados e campos de palavra-chave priorizados. Pelo menos um campo precisa ser especificado para cada uma das três subpropriedades (titleField, prioritizedKeywordsFields e prioritizedContentFields). 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
name Obrigatórios. O nome da configuração semântica.
prioritizedFields Obrigatórios. Descreve os campos de título, conteúdo e palavra-chave a serem usados para classificação semântica, legendas, realces e respostas. Pelo menos uma das três subpropriedades (titleField, prioritizedKeywordsFields e prioritizedContentFields) precisa ser definida.
prioritizedFields.titleField Define o campo de título a ser usado para classificação semântica, legendas, realces e respostas. Se você não tiver um campo de título em seu índice, deixe isso em branco.
prioritizedFields.prioritizedContentFields Define os campos de conteúdo a serem usados para classificação semântica, legendas, realces e respostas. Para obter o melhor resultado, os campos selecionados devem conter texto no formulário de linguagem natural. A ordem dos campos na matriz representa sua prioridade. Campos com prioridade mais baixa poderão ser truncados se o conteúdo for longo.
prioritizedFields.prioritizedKeywordsFields Define os campos palavra-chave a serem usados para classificação semântica, legendas, realces 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. Campos com prioridade mais baixa poderão ser truncados se o conteúdo for longo.

similaridade

Propriedade opcional que se aplica aos 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, definir essa propriedade não tem efeito. Todos os serviços mais recentes usam BM25 como o único algoritmo de classificação para pesquisa de texto completo. Para obter mais informações, consulte Classificação de algoritmos no Azure AI Search.

sugestores

Especifica um constructo que armazena prefixos para correspondência em consultas parciais, como preenchimento automático e sugestões.

Atributo Descrição
name Obrigatórios. O nome do sugestor.
sourceFields Obrigatórios. Um ou mais campos de cadeia de caracteres para os quais você está habilitando o preenchimento automático ou os 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.

vectorSearch

O objeto vectorSearch permite a configuração de propriedades de pesquisa de vetor. Somente as configurações de algoritmo podem ser configuradas no momento. Isso permite a configuração do tipo de algoritmo e dos parâmetros de algoritmo usados para campos de vetor. Você pode ter várias configurações. As configurações referenciadas por um campo de vetor não podem ser modificadas nem excluídas. Todas as configurações que não são referenciadas podem ser modificadas ou excluídas. Uma definição de campo de vetor (na coleção de campos) deve especificar qual configuração de algoritmo de pesquisa de vetor (por meio da vectorSearchConfiguration propriedade) 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
name Obrigatórios. O nome da configuração do algoritmo.
kind O tipo de algoritmo a ser usado. Há suporte apenas para "hnsw", que é o algoritmo hierárquico HNSW (Navigable Small World).
hnswParameters Opcional. Parâmetros para o algoritmo "hnsw". Se esse objeto for omitido, os valores padrão serão usados.

hnswParameters

Esse 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 Cadeia de caracteres. A métrica de similaridade a ser usada para comparações de vetor. Para hnsw, os valores permitidos são "cosseno", "euclidean" e "dotProduct". O valor padrão é "cosseno".
m Inteiro. O número de links bidirecionais criados para cada novo elemento durante a construção. O padrão é 4. O intervalo permitido é de 4 a 10. Valores maiores levam a grafos mais densos, melhorando o desempenho da consulta, mas exigem mais memória e computação.
efConstruction 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 de í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 é usado 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 reduz 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.

Confira também