Criar ou Atualizar Índice (API REST de Pré-visualização)

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

Importante

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

2021-04-30-Preview adiciona:

  • "semmanticConfiguration" utilizado para analisar a classificação semântica para campos específicos.
  • "identity", em "encryptionKey", utilizado para obter uma chave de encriptação gerida pelo cliente do Azure Key Vault com uma identidade gerida atribuída pelo utilizador.

2020-06-30-Pré-visualização adiciona:

  • "normalizadores", utilizados para insensibilidade de maiúsculas e minúsculas em ordenaçõ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 (sugestores, perfis de classificação e configuração CORS) que definem outros comportamentos de pesquisa.

Pode utilizar POST ou PUT num pedido de criação. Para qualquer um deles, o corpo do pedido 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 pedidos de atualização, utilize 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]

O HTTPS é necessário para todos os pedidos de serviço. Se o índice não existir, será criado. Se já existir, será atualizado para a nova definição.

A criação de um índice estabelece o esquema e os metadados. Preencher o índice é uma operação separada. Para este passo, pode utilizar um indexador (veja Operações do Indexador, disponíveis para origens de dados suportadas) ou Adicionar, Atualizar ou Eliminar Documentos. O número máximo de índices que pode criar varia consondo o escalão de preço. Em cada índice, existem limites em elementos individuais. Para obter mais informações, veja Limites de serviço para a Pesquisa de IA do Azure.

A atualização de um índice existente tem de incluir a definição de esquema completa, incluindo as definições originais que pretende preservar. Em geral, o melhor padrão para atualizações é obter a definição de índice com um GET, modificá-la e, em seguida, atualizá-la com PUT.

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

  • Adicionar novos campos

  • Adicionar ou alterar perfis de classificação

  • Adicionar ou alterar configurações semânticas

  • Alterar as opções CORS

  • Alterar os campos existentes com qualquer uma das três modificações seguintes:

    • Mostrar ou ocultar campos (retrievable: true | false)
    • Alterar o analisador utilizado no momento da consulta (searchAnalyzer)
    • Adicionar ou editar o sinónimoMap utilizado no momento da consulta (synonymMaps)

Para fazer qualquer uma das alterações de esquema acima a um índice existente, especifique o nome do índice no URI do pedido e, em seguida, 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. Não é consumido espaço de armazenamento adicional até que ocorra um de dois aspetos: é fornecido um valor para o novo campo (através da intercalação) ou são adicionados novos documentos.

Atualizações a ter suggester restrições semelhantes: os 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 sem suggesters uma reconstrução de índice.

Atualizações a um analisador, um tokenizador, um filtro de token ou um filtro de caráter não são permitidos. As novas podem ser criadas com as alterações que pretende, mas tem de colocar o índice offline ao adicionar as novas definições do analisador. Definir o allowIndexDowntime sinalizador como verdadeiro no pedido 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

Esta operação coloca o índice offline durante, pelo menos, alguns segundos, o que significa que a indexação e os pedidos de consulta falham até que o índice esteja novamente online e pronto para processar pedidos.

Parâmetros do URI

Parâmetro Description
nome do serviço Obrigatório. Defina este valor como o nome exclusivo definido pelo utilizador do seu serviço de pesquisa.
nome do índice Necessário no URI se utilizar PUT. O nome tem de ser minúscula, começar com uma letra ou número, não ter barras ou pontos e ter menos de 128 carateres. Os traços não podem ser consecutivos.
api-version Obrigatório. A versão de pré-visualização atual é 2023-07-23-preview. Veja Versões da API para obter mais versões.
allowIndexDowntime Opcional. Falso por predefinição. Defina como verdadeiro para determinadas atualizações, como adicionar ou modificar um analisador, tokenizador, filtro de token, filtro de caráter ou propriedade de semelhança. O índice é offline durante a atualização, normalmente não mais do que vários segundos.

Cabeçalhos do Pedido

A tabela seguinte descreve os cabeçalhos de pedido obrigatórios e opcionais.

Campos Description
Content-Type Obrigatório. Defina este valor como application/json
api-key Opcional se estiver a utilizar funções do Azure e for fornecido um token de portador no pedido, caso contrário, é necessária uma chave. Uma chave de api é uma cadeia exclusiva gerada pelo sistema que autentica o pedido no seu serviço de pesquisa. Criar pedidos tem de incluir um api-key cabeçalho definido para a sua chave de administrador (em oposição a uma chave de consulta). Veja Ligar à Pesquisa de IA do Azure com a autenticação de chaves para obter detalhes.

Corpo do Pedido

O corpo do pedido contém uma definição de esquema, que inclui a lista de campos de dados dentro de documentos que são inseridos neste índice.

O JSON seguinte é uma representação de alto nível de um esquema que suporta a pesquisa de vetores. Um esquema requer um campo de chave e esse campo de chave pode ser pesquisável, filtráveis, ordenáveis e facetáveis.

Um campo de pesquisa de vetores é do tipo Collection(Edm.Single). Como os campos de vetor não são textuais, um campo de vetor não pode ser utilizado como uma chave e não aceita analisadores, normalizadores, sugestores ou sinónimos. Tem de ter uma propriedade "dimensões" e uma propriedade "vectorSearchConfiguration".

Um esquema que suporte a pesquisa de vetores também pode suportar a pesquisa de palavras-chave. Outros campos não detetores no índice podem utilizar todos os analisadores, sinónimos e perfis de classificação que 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) { }  
}  

O pedido contém as seguintes propriedades:

Propriedade Descrição
name Obrigatório. O nome do índice. Um nome de índice só tem de conter letras minúsculas, dígitos ou traços, não pode iniciar ou terminar com traços e está limitado a 128 carateres.
descrição Uma descrição opcional.
campos Uma coleção de campos para este índice, em que cada campo tem um nome, um tipo de dados suportado que está em conformidade com o Modelo de Dados de Entidade (EDM) e atributos que definem ações permitidos nesse campo. A coleção de campos tem de ter um campo de tipo Edm.String com "chave" definido como "verdadeiro". Este campo representa o identificador exclusivo, por vezes denominado ID do documento, para cada documento armazenado com o índice. A coleção de campos agora aceita campos de vetor.
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.
sugestores Especifica uma construção que armazena prefixos para correspondência em consultas parciais, como conclusão automática e sugestões.
scoreProfiles Opcional. Utilizado para otimização por relevância para consultas de texto completo.
semântica Opcional. Define os parâmetros de um índice de pesquisa que influenciam as capacidades de pesquisa semântica. É necessária uma configuração semântica para consultas semânticas. Para obter mais informações, consulte Criar uma consulta semântica.
vectorSearch Opcional. Configura várias definições de pesquisa de vetores. Só é possível configurar algoritmos de pesquisa de vetores.
normalizadores Opcional. Normaliza a ordenação lexicográfica das cadeias de carateres, produzindo ordenação e filtragem não sensíveis a maiúsculas e minúsculas.
analisadores, charFilters, tokenizers, tokenFilters Opcional. Especifique estas secções do índice se estiver a definir analisadores personalizados. Por predefinição, estas secções são nulas.
defaultScoringProfile Nome de um perfil de classificação personalizado que substitui os comportamentos de classificação predefinidos.
corsOptions Opcional. Utilizado para consultas entre origens no índice.
encryptionKey Opcional. Utilizado para encriptação adicional do índice, através de chaves de encriptação geridas pelo cliente (CMK) no Azure Key Vault. Disponível para serviços de pesquisa faturáveis criados em ou depois de 2019-01-01.

Resposta

Para um pedido de criação bem-sucedido, deverá ver o código de estado "201 Criado". Por predefinição, o corpo da resposta contém o JSON para a definição de índice que foi criada. No entanto, se o cabeçalho do pedido Preferir estiver definido como return=minimal, o corpo da resposta está vazio e o código de estado de êxito é "204 Sem Conteúdo" em vez de "201 Criado". Isto é verdade independentemente de PUT ou POST ser utilizado para criar o índice.

Para um pedido de atualização bem-sucedido, deverá ver "204 Sem Conteúdo". Por predefinição, o corpo da resposta está vazio. No entanto, se o cabeçalho do Prefer pedido estiver definido como return=representation, o corpo da resposta contém o JSON para a definição de índice que foi atualizada. Neste caso, o código de estado de êxito é "200 OK".

Exemplos

Exemplo: Vetor

A pesquisa de vetor é implementada ao nível do campo. Esta definição coloca o foco nos campos de vetor. Os campos de vetor têm de ser do tipo Collection(Edm.Single) utilizado para armazenar valores de vírgula 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 suportadas pelo modelo de machine learning utilizado para gerar incorporações. Por exemplo, se estiver a utilizar text-embedding-ada-002, o número máximo de dimensões de saída é de 1536 por este documento. O "algorithmConfiguration" está definido como o nome da configuração "vectorSearch" no seu índice. Pode definir múltiplos no índice e, em seguida, especificar um por campo.

Muitos atributos aplicam-se apenas a campos não devector. Os atributos como "filterable", "sortable", "facetable", "analyzer", "normalizer" e "synonymMaps" são ignorados para campos de vetor. Da mesma forma, se definir propriedades apenas de vetor como "dimensões" ou "vectorSearchConfiguration" no campo que contém conteúdo alfanumérico, esses atributos sã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 vetor e campos não vetores

A pesquisa de vetor é implementada ao nível do campo. Para suportar cenários de consulta híbrida, crie pares de campos para consultas de vetor e não detetor. Os campos "title", "titleVector", "content", "contentVector" seguem esta convenção. Se também quiser utilizar a pesquisa semântica, tem de ter campos de texto não devector 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 tem de ter a "chave" definida como verdadeira.

{
  "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 sugestão deve especificar campos de cadeia "pesquisáveis" e "recuperáveis" (nas APIs REST, todos os campos simples são "retrievable": true por predefinição). Depois de um sugeridor ser definido, pode referenciá-lo por nome em pedidos de consulta que utilizem a API de Sugestões ou a API de Conclusão Automática, dependendo se pretende devolver uma correspondência ou o resto 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

Os analisadores e normalizadores são referenciados em definições de campo e podem ser predefinidos ou personalizados. Se estiver a utilizar analisadores personalizados ou normalizadores, especifique-os no índice nas secções "analisadores" e "normalizadores".

O exemplo seguinte ilustra analisadores personalizados e normalizadores para "Etiquetas". Também demonstra um normalizador predefinido (padrão) e um analisador (en.microsoft) para "HotelName" e "Description", respetivamente.

{
  "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 a relevância da pesquisa

Esta propriedade define o algoritmo de classificação utilizado para criar uma classificação de relevância nos resultados da pesquisa de uma consulta de pesquisa de texto completo. Nos serviços criados após 15 de julho de 2020, esta propriedade é ignorada porque o algoritmo de semelhança é sempre BM25. Para serviços existentes criados antes de 15 de julho de 2020, pode optar ativamente por participar no BM25 ao definir esta construção da seguinte forma:

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

Exemplo: Opções cors

O JavaScript do lado do cliente não pode chamar nenhuma APIs por predefinição, uma vez que o browser impede todos os pedidos de várias origens. Para permitir consultas entre origens ao índice, ative o CORS (Partilha de recursos de várias origens (Wikipédia)) ao definir o corsOptions atributo . 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 encriptação com credenciais de acesso

As chaves de encriptação são chaves geridas pelo cliente utilizadas para encriptação extra. Para obter mais informações, veja Encriptação com chaves geridas 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 encriptação com identidade gerida

Pode autenticar-se no Azure Key Vault com uma identidade gerida atribuída pelo sistema ou atribuída pelo utilizador (pré-visualização). Neste caso, omita as credenciais de acesso ou defina como nula. O exemplo seguinte mostra uma identidade gerida atribuída pelo utilizador. Para utilizar uma identidade gerida atribuída pelo sistema, omita as credenciais de acesso e a identidade. Desde que a identidade do sistema do seu serviço de pesquisa tenha permissões no Azure Key Vault, o pedido de ligação deverá ser bem-sucedido.

{
  "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 Classificação

Um perfil de classificação é uma secção do esquema que define comportamentos de classificação personalizados que lhe permitem influenciar os documentos que aparecem mais alto nos resultados da pesquisa. Os perfis de classificação são compostos por pesos e funções de campo. Para utilizá-los, especifique um perfil por nome na cadeia de consulta. Para obter mais informações, veja Adicionar perfis de classificaçã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 que é utilizada para configurar os campos que são utilizados pela pesquisa semântica para classificação, legendas, destaques e respostas. Para utilizar a pesquisa semântica, tem de especificar o nome de uma configuração semântica no momento da consulta. Para obter mais informações, veja 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 Description
corsOptions Lista os domínios ou origens que são concedidos ao índice.
defaultScoringProfile Nome de um perfil de classificação personalizado que substitui os comportamentos de classificação predefinidos.
encryptionKey Configura uma ligação ao Azure Key Vault para encriptação gerida pelo cliente.
campos Define definições e atributos de um campo num índice de pesquisa.
normalizadores Configura um normalizador personalizado. Normaliza a ordenação lexicográfica de cadeias, produzindo ordenação, facetação e saída de filtragem não sensíveis a maiúsculas e minúsculas.
semântica Configura campos utilizados pela pesquisa semântica para classificação, legendas, destaques e respostas.
scoreProfiles Utilizado para otimização de relevância para consultas de texto completo.
semelhança
sugestores Configura o armazenamento de prefixos internos para correspondência em consultas parciais, como conclusão automática e sugestões.
vectorSearch Configura o algoritmo utilizado para campos de vetor.

corsOptions

O JavaScript do lado do cliente não pode chamar nenhuma APIs por predefinição, uma vez que o browser impede todos os pedidos de origem cruzada. Para permitir consultas entre origens para o índice, ative o CORS (Partilha de Recursos entre Origens) ao definir o atributo "corsOptions". Por motivos de segurança, apenas as APIs de consulta suportam CORS.

Atributo Descrição
allowedOrigins Obrigatório. Uma lista delimitada por vírgulas de origens a quem é concedido acesso ao índice, em que cada origem é normalmente do formulário protocol://< fully-qualified-domain-name>:<port> (embora a <porta> seja frequentemente omitida). Isto significa que qualquer código JavaScript servido a partir dessas origens tem permissão para consultar o índice (partindo do princípio de que fornece uma chave de API válida). Se quiser permitir o acesso a todas as origens, especifique * como um único item na matriz "allowedOrigins". Isto não é recomendado para produção, mas pode ser útil para desenvolvimento ou depuração.
maxAgeInSeconds Opcional. Os browsers utilizam este valor para determinar a duração (em segundos) para colocar em cache as respostas de pré-voo CORS. Tem de ser um número inteiro não negativo. O desempenho melhora se este valor for maior, mas esses ganhos são compensados pela quantidade de tempo necessário para que as alterações da política CORS entrem em vigor. Se não estiver definido, é utilizada uma duração predefinida de 5 minutos.

defaultScoringProfile

Opcional. Uma cadeia que é o nome de um perfil de classificação personalizado definido no índice. Um perfil predefinido é invocado sempre que um perfil personalizado não for especificado explicitamente na cadeia de consulta. Para obter mais informações, veja Adicionar perfis de classificação a um índice de pesquisa.

encryptionKey

Configura uma ligação ao Azure Key Vault para chaves de encriptação geridas pelo cliente (CMK) suplementares. Disponível para serviços de pesquisa faturáveis criados em ou depois de 1 de janeiro de 2019.

Uma ligação ao cofre de chaves tem de ser autenticada. Pode utilizar "accessCredentials" ou uma identidade gerida para esta finalidade.

As identidades geridas podem ser atribuídas pelo sistema ou pelo utilizador (pré-visualização). Se o serviço de pesquisa tiver uma identidade gerida atribuída pelo sistema e uma atribuição de função que conceda acesso de leitura ao cofre de chaves, pode omitir "identidade" e "accessCredentials" e o pedido será autenticado com a identidade gerida. Se o serviço de pesquisa tiver a atribuição de identidade e função atribuída pelo utilizador, defina a propriedade "identidade" para o ID de recurso dessa identidade.

Atributo Descrição
keyVaultKeyName Obrigatório. Nome da chave de Key Vault do Azure utilizada para encriptação.
keyVaultKeyVersion Obrigatório. Versão da chave de Key Vault do Azure.
keyVaultUri Obrigatório. URI do Azure Key Vault (também conhecido como nome DNS) que fornece a chave. Um URI de exemplo pode ser https://my-keyvault-name.vault.azure.net
accessCredentials Opcional. Omita esta propriedade se estiver a utilizar uma identidade gerida. Caso contrário, as propriedades de "accessCredentials" incluem:
"applicationId" (um ID de Aplicação do Azure Active Directory que tem permissões de acesso ao Azure Key Vault especificado).
"applicationSecret" (a chave de autenticação da aplicação Azure AD especificada).
identidade Opcional, a menos que esteja a utilizar uma identidade gerida atribuída pelo utilizador para a ligação do serviço de pesquisa ao 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 numa definição de campo.

Atributo Descrição
name Obrigatório. Define o nome do campo, que tem de ser exclusivo na coleção de campos do campo principal ou índice.
tipo Obrigatório. Define o tipo de dados para o campo. Os campos podem ser simples ou complexos. Os campos simples são de tipos primitivos, como Edm.String para texto ou Edm.Int32 para números inteiros. Os campos complexos podem ter subcampos que são simples ou complexos. Isto permite-lhe modelar objetos e matrizes de objetos, o que, por sua vez, lhe permite carregar a maioria das estruturas de objetos JSON para o índice. Collection(Edm.Single) acomoda valores de vírgula flutuante de precisão única. É utilizado apenas para campos de vetor e é necessário. Veja Tipos de dados suportados para obter a lista completa de tipos suportados.
key Obrigatório. Defina este atributo como verdadeiro para designar que os valores de um campo identificam exclusivamente documentos no índice. O comprimento máximo dos valores num campo de chave é de 1024 carateres. Exatamente um campo de nível superior em cada índice tem de ser escolhido como o campo chave e tem de ser do tipo Edm.String. A predefinição é false para campos simples e null para campos complexos.

Os campos-chave podem ser utilizados para procurar documentos diretamente e atualizar ou eliminar documentos específicos. Os valores dos campos de chave são processados de forma sensível a maiúsculas e minúsculas ao procurar ou indexar documentos. Consulte Procurar documento e Adicionar, Atualizar ou Eliminar Documentos para obter detalhes.
recuperável Indica se o campo pode ser devolvido num resultado de pesquisa. Defina este atributo false como se quiser utilizar um campo (por exemplo, margem) como um filtro, ordenação ou mecanismo de classificação, mas não quiser que o campo seja visível para o utilizador final. Este atributo tem de ser true para campos de chave e tem de ser null para campos complexos. Este atributo pode ser alterado em campos existentes. Definir recuperável como true não causa qualquer aumento nos requisitos de armazenamento de índices. A predefinição é true para campos simples e null para campos complexos.
pesquisável Indica se o campo é pesquisável em texto completo e pode ser referenciado em consultas de pesquisa. Isto significa que é submetido a uma análise lexical , como quebra de palavras durante a indexação. Se definir um campo pesquisável para um valor como "Dia ensolarado", este é normalizado internamente nos tokens individuais "sunny" e "day". Isto permite pesquisas em texto completo para estes termos. Os campos do tipo Edm.String ou Collection(Edm.String) são pesquisáveis por predefinição. Este atributo tem de ser false para campos simples de outros tipos de dados não ligados e tem de ser null para campos complexos.

Um campo pesquisável consome espaço adicional no seu índice, uma vez que o Azure AI Search processa os conteúdos desses campos e organiza-os em estruturas de dados auxiliares para uma pesquisa eficaz. Se quiser poupar espaço no índice e não precisar que um campo seja incluído nas pesquisas, defina pesquisável como false. Veja Como funciona a pesquisa em texto completo na Pesquisa de IA do Azure para obter detalhes.
filtráveis Indica se pretende ativar o campo para ser referenciado em $filter consultas. Filtráveis difere de pesquisável na forma como as cadeias são processadas. Os campos do tipo Edm.String ou Collection(Edm.String) que são filtráveis não são submetidos a análise lexical, pelo que as comparações destinam-se apenas a correspondências exatas. Por exemplo, se definir esse campo f como "Dia ensolarado", $filter=f eq 'sunny' não encontrará correspondências, mas $filter=f eq 'Sunny day' sim. Este atributo tem de ser null para campos complexos. A predefinição é true para campos simples e null para campos complexos. Para reduzir o tamanho do índice, defina este atributo como false em campos nos quais não irá filtrar.
ordenável Indica se pretende ativar o campo para ser referenciado em $orderby expressões. Por predefinição, a Pesquisa de IA do Azure ordena os resultados por classificação, mas em muitas experiências os utilizadores querem ordenar por campos nos documentos. Um campo simples só pode ser ordenado se for de valor único (tem um único valor no âmbito do documento principal).

Os campos de coleção simples não podem ser ordenados, uma vez que são de valores múltiplos. Os subcampos simples de coleções complexas também têm múltiplos valores e, portanto, não podem ser ordenados. Isto é verdade, quer se trate de um campo principal imediato, ou de um campo predecessor, que é a coleção complexa. Os campos complexos não podem ser ordenáveis e o atributo ordenável tem de ser null para esses campos. A predefinição para o sortível é true para campos simples de valor único, false para campos simples de valores múltiplos e null para campos complexos.
facetável Indica se pretende ativar o campo para ser referenciado em consultas de facetas. Normalmente utilizado numa apresentação de resultados de pesquisa que inclui a contagem de resultados por categoria (por exemplo, procure câmaras digitais e veja acessos por marca, por megapixéis, por preço, etc.). Este atributo tem de ser null para campos complexos. Campos do tipo Edm.GeographyPoint ou Collection(Edm.GeographyPoint) não podem ser facetáveis. A predefinição é true para todos os outros campos simples. Para reduzir o tamanho do índice, defina este atributo como false em campos nos quais não irá enfrentar.
analisador Define o analisador lexical para tokening de cadeias durante as operações de indexação e consulta. Os valores válidos para esta propriedade incluem analisadores de idiomas, analisadores incorporados e analisadores personalizados. A predefinição é standard.lucene. Este atributo só pode ser utilizado com campos pesquisáveis e não pode ser definido em conjunto com searchAnalyzer ou indexAnalyzer. Assim que o analisador for escolhido e o campo for criado no índice, não poderá ser alterado para o campo. Tem de ser null para campos complexos.
searchAnalyzer Defina esta propriedade em conjunto com indexAnalyzer para especificar diferentes analisadores lexical para indexação e consultas. Se utilizar esta propriedade, defina o analisador como null e certifique-se de que indexAnalyzer está definido como um valor permitido. Os valores válidos para esta propriedade incluem analisadores incorporados e analisadores personalizados. Este atributo só pode ser utilizado com campos pesquisáveis. O analisador de pesquisa pode ser atualizado num campo existente, uma vez que só é utilizado no momento da consulta. Tem de ser null para campos complexos.
indexAnalyzer Defina esta propriedade em conjunto com searchAnalyzer para especificar diferentes analisadores lexical para indexação e consultas. Se utilizar esta propriedade, defina o analisador como null e certifique-se de que searchAnalyzer está definido como um valor permitido. Os valores válidos para esta propriedade incluem analisadores incorporados e analisadores personalizados. Este atributo só pode ser utilizado com campos pesquisáveis. Depois de o analisador de índices ser escolhido, não pode ser alterado para o campo. Tem de ser null para campos complexos.
normalizador Define o normalizador para operações de filtragem, ordenação e facetação. Pode ser o nome de um normalizador predefinido ou de um normalizador personalizado definido no índice. A predefinição é null, o que resulta numa correspondência exata no texto literal e não analisado. Este atributo só pode ser utilizado com Edm.String campos e Collection(Edm.String) que tenham, pelo menos, um dos campos filtráveis, ordenáveis ou facetáveis definidos como verdadeiros. Um normalizador só pode ser definido no campo quando adicionado ao índice e não pode ser alterado mais tarde. Tem de ser null para campos complexos. Os valores válidos para um normalizador predefinido incluem:

standard- Reduz em minúsculas o texto seguido de asciifolding.
lowercase- Transforma carateres em minúsculas.
uppercase - Transforma carateres em maiúsculas.
asciifolding - Transforma carateres que não estão no bloco Basic Latin Unicode para o equivalente ASCII, se existir. Por exemplo, alterar "à" para "a".
elision- Remove a elisão do início dos tokens.
sinónimoMaps Uma lista dos nomes dos mapas de sinónimos a associar a este campo. Este atributo só pode ser utilizado com campos pesquisáveis. Atualmente, só é suportado um mapa de sinónimos por campo. A atribuição de um mapa de sinónimos a um campo garante que os termos de consulta destinados a esse campo são expandidos no momento da consulta através das regras no mapa de sinónimos. Este atributo pode ser alterado em campos existentes. Tem de ser null ou uma coleção vazia para campos complexos.
fields Uma lista de subcampos se se trata de um campo do tipo Edm.ComplexType ou Collection(Edm.ComplexType). Tem de estar null ou estar vazio para campos simples. Veja Como modelar tipos de dados complexos no Azure AI Search para obter mais informações sobre como e quando utilizar subcampos.
dimensões Número inteiro. Necessário para campos de vetor. **Tem de corresponder ao tamanho de incorporação de saída do modelo de incorporação. Por exemplo, para um modelo text-embedding-ada-002popular do Azure OpenAI, as dimensões de saída são 1536, pelo que estas seriam as dimensões a definir para esse campo de vetor. O atributo de dimensões tem um mínimo de 2 e um máximo de 2048 valores de vírgula flutuante cada.
vectorSearchConfiguration Necessário para definições de campos de vetor. Especifica o nome da configuração do algoritmo "vectorSearch" utilizada pelo campo de vetor. Assim que o campo for criado, não pode alterar o nome do vectorSearchConfiguration, mas pode alterar as propriedades da configuração do algoritmo no índice. Isto permite ajustes ao tipo de algoritmo e aos parâmetros.

Nota

Os campos do tipo Edm.String que são filtráveis, ordenáveis ou facetáveis podem ter, no máximo, 32 quilobytes de comprimento. Isto deve-se ao facto de os valores desses campos serem tratados como um termo de pesquisa único e o comprimento máximo de um termo no Azure AI Search ser de 32 quilobytes. Se precisar de armazenar mais texto do que este num único campo de cadeia, terá de definir explicitamente filtráveis, ordenáveis e facetáveis para false na definição do índice.

Definir um campo como pesquisável, filtrável, ordenável ou facetável tem um impacto no tamanho do índice e no desempenho das consultas. Não defina esses atributos em campos que não se destinam a ser referenciados em expressões de consulta.

Se um campo não estiver definido como pesquisável, filtráveis, ordenáveis ou facetáveis, o campo não pode ser referenciado em nenhuma expressão de consulta. Isto é útil para campos que não são utilizados em consultas, mas que são necessários nos resultados da pesquisa.

normalizadores

Define um normalizador personalizado que tem uma combinação definida pelo utilizador de filtros de carateres e filtros de tokens. Depois de definir um normalizador personalizado no índice, pode especificá-lo por nome numa definição de campo.

Atributo Descrição
name Obrigatório. Campo de cadeia que especifica um normalizador personalizado definido pelo utilizador.
charFilters Utilizado num normalizador personalizado. Pode ser um ou mais dos filtros de carateres disponíveis suportados para utilização num normalizador personalizado:
mapeamento
pattern_replace
tokenFilters Utilizado num normalizador personalizado. Pode ser uma ou mais dasinclinações de tokens disponíveis suportadas para utilização numnormalizador personalizado:
arabic_normalization





cjk_width german_normalization hindi_normalizationindic_normalization
persian_normalization
scandinavian_normalization
scandinavian_folding sorani_normalization

maiúsculas
minúsculas

scoreProfiles

Os perfis de classificação aplicam-se à pesquisa de texto completo. Um perfil é definido num índice e especifica a lógica personalizada que pode atribuir classificações de pesquisa mais elevadas a documentos correspondentes que cumprem os critérios definidos no perfil. Pode criar vários perfis de classificação e, em seguida, atribuir o que pretende a uma consulta.

Se criar um perfil personalizado, pode torná-lo a predefinição ao definir defaultScoringProfile. Para obter mais informações, veja Adicionar perfis de classificação a um índice de pesquisa.

semântica

Uma configuração semântica faz parte de uma definição de índice que é utilizada para configurar os campos 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 priorizados e campos de palavras-chave priorizados. Pelo menos um campo tem de ser especificado para cada um dos três subpropriedades (titleField, prioritizedKeywordsFields e prioritizedContentFields). Qualquer campo do tipo Edm.String ou Collection(Edm.String) pode ser utilizado como parte de uma configuração semântica.

Para utilizar a pesquisa semântica, tem de especificar o nome de uma configuração semântica no momento da consulta. Para obter mais informações, veja 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ório. O nome da configuração semântica.
prioritizedFields Obrigatório. Descreve os campos de título, conteúdo e palavra-chave a utilizar para classificação semântica, legendas, destaques e respostas. Pelo menos uma das três subpropriedades (titleField, prioritizedKeywordsFields e prioritizedContentFields) tem de ser definida.
prioritizedFields.titleField Define o campo de título a ser utilizado para classificação semântica, legendas, destaques e respostas. Se não tiver um campo de título no índice, deixe-o em branco.
prioritizedFields.prioritizedContentFields Define os campos de conteúdo a utilizar para classificação semântica, legendas, destaques e respostas. Para obter o melhor resultado, os campos selecionados devem conter texto na forma de linguagem natural. A ordem dos campos na matriz representa a sua prioridade. Os campos com prioridade inferior podem ficar truncados se o conteúdo for longo.
prioritizedFields.prioritizedKeywordsFields Define os campos de palavra-chave a utilizar 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 a sua prioridade. Os campos com prioridade inferior podem ficar truncados se o conteúdo for longo.

semelhança

Propriedade opcional que se aplica aos serviços criados antes de 15 de julho de 2020. Para esses serviços, pode definir esta propriedade para utilizar o algoritmo de classificação BM25 que foi introduzido em julho de 2020. Os valores válidos incluem "#Microsoft.Azure.Search.ClassicSimilarity" (a predefinição anterior) ou "#Microsoft.Azure.Search.BM25Similarity".

Para todos os serviços criados após julho de 2020, definir esta propriedade não tem qualquer efeito. Todos os serviços mais recentes utilizam bM25 como o único algoritmo de classificação para pesquisa em texto completo. Para obter mais informações, veja Algoritmos de classificação na Pesquisa de IA do Azure.

sugestores

Especifica uma construção que armazena prefixos para correspondência em consultas parciais, como conclusão automática e sugestões.

Atributo Descrição
name Obrigatório. O nome do sugeridor.
sourceFields Obrigatório. Um ou mais campos de cadeia para os quais está a ativar a conclusão automática ou os resultados sugeridos.
searchMode Necessário e sempre definido como analyzingInfixMatching. Especifica que a correspondência ocorre em qualquer termo na cadeia de consulta.

vectorSearch

O objeto vectorSearch permite a configuração das propriedades de pesquisa de vetores. Apenas as configurações do algoritmo podem ser configuradas atualmente. Isto permite a configuração do tipo de algoritmo e dos parâmetros de algoritmo utilizados para campos de vetor. Pode ter várias configurações. As configurações referenciadas por um campo de vetor não podem ser modificadas nem eliminadas. Quaisquer configurações que não sejam referenciadas podem ser modificadas ou eliminadas. Uma definição de campo de vetor (na coleção de campos) tem de especificar a configuração do algoritmo de pesquisa de vetores (através da vectorSearchConfiguration propriedade) que o campo está a utilizar.

"vectorSearch": {
    "algorithmConfigurations": [
        {
            "name": "my-vector-config",
            "kind": "hnsw",
            "hnswParameters": {
                "m": 4,
                "efConstruction": 400,
                "efSearch": 500,
                "metric": "cosine"
            }
        }
    ]
}
Atributo Descrição
name Obrigatório. O nome da configuração do algoritmo.
tipo O tipo de algoritmo a utilizar. Apenas é suportado "hnsw", que é o algoritmo Hierárquico do Pequeno Mundo (HNSW).
hnswParameters Opcional. Parâmetros para o algoritmo "hnsw". Se este objeto for omitido, são utilizados valores predefinidos.

hnswParameters

Este objeto contém as personalizações para hnsw parâmetros de algoritmo. Todas as propriedades são opcionais e os valores predefinidos são utilizados se forem omitidos.

Atributo Descrição
Métrica Cadeia. A métrica de semelhança a utilizar para comparações de vetores. Para hnsw, os valores permitidos são "cosine", "euclidean" e "dotProduct". O valor predefinido é "cosseno".
m Número inteiro. O número de ligações bidirecionais criadas para cada novo elemento durante a construção. A predefinição é 4. O intervalo permitido é de 4 a 10. Os valores maiores levam a gráficos mais densos, melhorando o desempenho das consultas, mas requerem mais memória e computação.
efConstruction Número inteiro. O tamanho da lista dinâmica para os vizinhos mais próximos utilizados durante a indexação. A predefinição é 400. O intervalo permitido é de 100 a 1000.Os valores maiores levam a uma melhor qualidade de índice, mas requerem mais memória e computação.
efSearch Número inteiro. O tamanho da lista dinâmica que contém os vizinhos mais próximos, que é utilizado durante o tempo de pesquisa. A predefinição é 500. O intervalo permitido é de 100 a 1000. Aumentar este parâmetro pode melhorar os resultados da pesquisa, mas reduz o desempenho das consultas.

Uma efSearch vez que é um parâmetro de tempo de consulta, este valor pode ser atualizado mesmo que um campo existente esteja a utilizar uma configuração de algoritmo.

Ver também