Créer un index (API REST Recherche Azure AI)

Un index est le principal moyen d’organiser et de rechercher des documents dans Recherche Azure AI, de la même manière qu’une table organise les enregistrements dans une base de données. Chaque index possède une collection de documents qui sont tous conformes au schéma d’index (noms de champs, types de données et attributs), mais les index spécifient également des constructions supplémentaires (suggesteurs, profils de scoring et configuration CORS) qui définissent d’autres comportements de recherche.

Vous pouvez utiliser POST ou PUT sur la demande. Pour l’une ou l’autre, le document JSON dans le corps de la demande fournit la définition de l’objet.

POST https://[servicename].search.windows.net/indexes?api-version=[api-version]  
  Content-Type: application/json
  api-key: [admin key]  

Vous pouvez également utiliser une requête PUT en spécifiant le nom d'index sur l'URI.

PUT https://[servicename].search.windows.net/indexes/[index name]?api-version=[api-version]
  Content-Type: application/json
  api-key: [admin key]

Le protocole HTTPS est requis pour toutes les requêtes de service. Si l’index n’existe pas, il est créé. S’il existe déjà, il est mis à jour vers la nouvelle définition.

La création d'un index établit le schéma et les métadonnées. Le remplissage de l'index est une opération distincte. Pour cette étape, vous pouvez utiliser un indexeur (voir Opérations d’indexeur, disponible pour les sources de données prises en charge) ou ajouter, mettre à jour ou supprimer des documents. Les index inversés sont générés lorsque les documents sont publiés.

Notes

Le nombre maximal d'index que vous pouvez créer varie en fonction du niveau de tarification. Pour plus d’informations, consultez Limites du Service.

Paramètres URI

Paramètre Description
nom du service Obligatoire. Définissez cette valeur sur le nom unique défini par l’utilisateur de votre service de recherche.
nom de l'index Obligatoire sur l’URI si vous utilisez PUT. Le nom doit être en minuscules, commencer par une lettre ou un nombre, avoir aucune barre oblique ou point, et comporter moins de 128 caractères. Le début du nom doit commencer par une lettre ou un nombre, mais le reste du nom peut inclure n’importe quelle lettre, nombre, traits de soulignement et tirets, tant que les traits de soulignement et les tirets ne sont pas consécutifs.
api-version Obligatoire. Pour obtenir la liste des versions prises en charge, consultez Versions d’API .

En-têtes de requête

Le tableau suivant décrit les en-têtes de demande obligatoires et facultatifs.

Champs Description
Content-Type Obligatoire. À définir avec la valeur application/json
api-key Facultatif si vous utilisez des rôles Azure et qu’un jeton de porteur est fourni sur la demande, sinon une clé est requise. Les demandes de création doivent inclure un api-key en-tête défini sur votre clé d’administration (par opposition à une clé de requête). Pour plus d’informations, consultez Se connecter à Azure AI Search à l’aide de l’authentification par clé .

Corps de la demande

Le corps de la demande contient une définition de schéma qui inclut la liste des champs de données des documents qui alimenteront l'index.

Le code JSON suivant est une représentation de haut niveau des parties main de la définition.

{  
  "name": (optional on PUT; required on POST) "Name 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.Double) | Collection(Edm.Boolean) | Collection(Edm.DateTimeOffset) | Collection(Edm.GeographyPoint) | Collection(Edm.ComplexType)",  
      "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),  
      "key": true | false (default, only Edm.String fields can be keys, enable on one field only),  
      "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)
      "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.)
    }
  ],
  "similarity": (optional) { },
  "suggesters": (optional) [ ... ],  
  "scoringProfiles": (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) { }  
}  

La requête peut contenir les propriétés suivantes :

Propriété Description
name Obligatoire. Nom de l’index. Un nom d’index ne doit contenir que des minuscules, des chiffres ou des tirets, ne peut pas commencer ou se terminer par des tirets et est limité à 128 caractères.
fields Obligatoire. Collection de champs qui seront alimentés dans cet index, notamment le nom, le type de données et les attributs qui définissent des actions autorisées sur ce champ. Les types de données sont conformes au modèle de données d’entité (EDM). Pour plus d’informations, consultez Types de données pris en charge. Il doit y avoir un champ dans la collection qui est spécifié comme champ de clé . Il doit s'agir d'un champ de chaîne. Ce champ représente l’identificateur unique, parfois appelé ID de document, pour chaque document stocké avec l’index. Les clés de document respectent la casse. Par exemple, un document avec la clé « abc » est considéré comme distinct d’un document avec la clé « ABC ».
similarity facultatif. Pour les services créés avant le 15 juillet 2020, définissez cette propriété pour utiliser l’algorithme de classement BM25. Les valeurs valides sont "#Microsoft.Azure.Search.ClassicSimilarity" ou "#Microsoft.Azure.Search.BM25Similarity". Les versions d’API qui prennent en charge cette propriété incluent 2020-06-30 et 2019-05-06-Preview. Pour plus d’informations, consultez Algorithmes de classement dans Recherche Azure AI.
suggesteurs facultatif. Utilisé pour les requêtes supprimées automatiquement ou les résultats de recherche suggérés, un par index. Il s’agit d’une structure de données qui stocke des préfixes pour la correspondance sur des requêtes partielles telles que la saisie semi-automatique et les suggestions. Se compose d’un name et de champs prenant en charge les suggestions qui fournissent du contenu pour les requêtes automatiquement supprimées et les résultats suggérés. searchMode est obligatoire et toujours défini sur analyzingInfixMatching. Il spécifie que la correspondance se produira sur n’importe quel terme de la chaîne de requête.
scoringProfiles facultatif. Utilisé pour le classement de score de recherche personnalisé. Définissez defaultScoringProfile pour utiliser un profil personnalisé comme profil par défaut, appelé chaque fois qu’un profil personnalisé n’est pas spécifié sur la chaîne de requête. Pour plus d’informations sur les éléments, consultez Ajouter des profils de scoring à un index de recherche et l’exemple de la section suivante.
analyseurs, charFilters, générateurs de jetons, tokenFilters facultatif. Spécifiez ces sections de l’index si vous définissez des analyseurs personnalisés. Par défaut, ces sections sont null.
defaultScoringProfile facultatif. Nom d’un profil de scoring personnalisé qui remplace les comportements de scoring par défaut.
corsOptions facultatif. JavaScript côté client ne peut pas appeler d’API par défaut, car le navigateur empêche toutes les demandes d’origine croisée. Pour autoriser les requêtes cross-origin dans l'index, activez CORS (partage des ressources cross-origin) en définissant l'attribut corsOptions. Pour des raisons de sécurité, seules les API de requête prennent en charge CORS. La corsOptions section comprend :
allowedOrigins
(Obligatoire) Une liste délimitée par des virgules d’origines qui se verra accorder l’accès à votre index, où chaque origine est généralement de la forme protocol://< nom-domaine> qualifié :<port> (bien que le <port> soit souvent omis). Cela signifie que tout code JavaScript servi à partir de ces origines est autorisé à interroger votre index (pour autant qu'il fournisse la api-key appropriée). Si vous souhaitez autoriser l’accès à toutes les origines, spécifiez * comme un seul élément dans le allowedOrigins tableau. Cela n’est pas recommandé pour la production, mais peut être utile pour le développement ou le débogage.

maxAgeInSeconds (Facultatif) Les navigateurs utilisent cette valeur pour déterminer la durée (en secondes) de mise en cache des réponses en pré-vol CORS. Il doit s'agir d'un entier non négatif. Plus cette valeur est importante, meilleures sont les performances, mais plus il faut de temps pour que les modifications apportées à la stratégie CORS prennent effet. S’il n’est pas défini, une durée par défaut de 5 minutes sera utilisée.
encryptionKey facultatif. Utilisé pour chiffrer une carte de synonymes, avec vos propres clés, gérée dans votre Key Vault Azure. Disponible pour les services de recherche facturables créés le ou après le 01/01/01/2019.

Une encryptionKey section contient un défini par keyVaultKeyName l’utilisateur (obligatoire), un généré par keyVaultKeyVersion le système (obligatoire) et un keyVaultUri fournissant la clé (obligatoire, également appelé nom DNS). Un exemple d’URI peut être « https://my-keyvault-name.vault.azure.net".

Si vous le souhaitez, vous pouvez spécifier accessCredentials si vous n’utilisez pas d’identité système managée. Propriétés de accessCredentials include applicationId (Microsoft Entra ID ID d’application qui a obtenu des autorisations d’accès à votre Key Vault Azure spécifié) et applicationSecret (clé d’authentification de l’application inscrite). Un exemple de la section suivante illustre la syntaxe.

Définitions de champ

Les attributs suivants peuvent être définis sur un champ lors de la création d’un index.

Attribut Description
name Obligatoire. Définit le nom du champ, qui doit être unique dans la collection fields de l’index ou du champ parent.
type Obligatoire. Spécifie le type de données pour le champ. Les champs peuvent être simples ou complexes. Les champs simples sont de types primitifs, comme Edm.String pour le texte ou Edm.Int32 pour les entiers. Les champs complexes peuvent avoir des sous-champs qui sont eux-mêmes simples ou complexes. Cela vous permet de modéliser des objets et des tableaux d’objets, ce qui vous permet à son tour de charger la plupart des structures d’objets JSON dans votre index. Pour obtenir la liste complète des types pris en charge, consultez Types de données pris en charge (Recherche Azure AI).
key Obligatoire. Définissez cet attribut sur true pour indiquer que les valeurs d’un champ identifient de manière unique les documents de l’index. La longueur maximale des valeurs dans un champ de clé est de 1 024 caractères. Exactement un champ de niveau supérieur dans chaque index doit être choisi comme champ de clé et il doit être de type Edm.String. La valeur par défaut est false pour les champs simples et null pour les champs complexes.

Les champs clés peuvent être utilisés pour rechercher directement des documents et mettre à jour ou supprimer des documents spécifiques. Les valeurs des champs clés sont gérées de manière respectant la casse lors de la recherche ou de l’indexation de documents. Pour plus d’informations, consultez Document de recherche (API REST Azure AI Search) et Ajouter, mettre à jour ou supprimer des documents (API REST Recherche Azure AI).
Récupérable Indique si le champ peut être retourné dans un résultat de recherche. Définissez cet attribut sur false si vous souhaitez utiliser un champ (par exemple, marge) comme mécanisme de filtre, de tri ou de scoring, mais que vous ne souhaitez pas que le champ soit visible par l’utilisateur final. Cet attribut doit concerner true les champs clés et null les champs complexes. Cet attribut peut être modifié sur des champs existants. La définition de récupérable sur true n’entraîne pas d’augmentation des exigences de stockage d’index. La valeur par défaut est true pour les champs simples et null pour les champs complexes.
peut faire l’objet d’une recherche Indique si le champ peut faire l’objet d’une recherche en texte intégral et peut être référencé dans les requêtes de recherche. Cela signifie qu’il fera l’objet d’une analyse lexicale telle que la rupture de mot pendant l’indexation. Si vous définissez un champ pouvant faire l’objet d’une recherche sur une valeur telle que « Jour ensoleillé », il sera normalisé en interne et divisé en jetons individuels « sunny » et « day ». Cela permet d'effectuer des recherches en texte intégral de ces termes. Les champs de type Edm.String ou Collection(Edm.String) peuvent faire l’objet d’une recherche par défaut. Cet attribut doit concerner false des champs simples d’autres types de données autres que des chaînes, et il doit s’agir null de champs complexes.

Un champ pouvant faire l’objet d’une recherche consomme de l’espace supplémentaire dans votre index, car Azure AI Search traite le contenu de ces champs et les organise dans des structures de données auxiliaires pour une recherche performante. Si vous souhaitez économiser de l’espace dans votre index et que vous n’avez pas besoin d’inclure un champ dans les recherches, définissez pouvant faire l’objet d’une recherche sur false. Pour plus d’informations, consultez Fonctionnement de la recherche en texte intégral dans Recherche Azure AI .
filterable Indique s’il faut activer le champ à référencer dans $filter les requêtes. Le filtrage diffère de l’objet de recherche dans la façon dont les chaînes sont gérées. Les champs de type Edm.String ou Collection(Edm.String) filtrables ne font pas l’objet d’une analyse lexicale. Les comparaisons ne concernent donc que les correspondances exactes. Par exemple, si vous définissez un tel champ f sur « Jour ensoleillé », $filter=f eq 'sunny' ne trouve aucune correspondance, mais $filter=f eq 'Sunny day' le sera. Cet attribut doit être null pour les champs complexes. La valeur par défaut est true pour les champs simples et null pour les champs complexes. Pour réduire la taille de l’index, définissez cet attribut false sur sur les champs sur lesquels vous ne filtrez pas.
sortable Indique s’il faut activer le champ à référencer dans des $orderby expressions. Par défaut, Azure AI Search trie les résultats par score, mais dans de nombreuses expériences, les utilisateurs souhaitent trier par champs dans les documents. Un champ simple ne peut être triable que s’il est à valeur unique (il a une seule valeur dans l’étendue du document parent).

Les champs de collection simples ne peuvent pas être triables, car ils sont à valeurs multiples. Les sous-champs simples des collections complexes sont également à valeurs multiples et ne peuvent donc pas être triables. Cela est vrai, qu’il s’agisse d’un champ parent immédiat ou d’un champ ancêtre, c’est la collection complexe. Les champs complexes ne peuvent pas être triables et l’attribut triable doit être null pour ces champs. La valeur par défaut pour triable est true pour les champs simples à valeur unique, false pour les champs simples à valeurs multiples et null pour les champs complexes.
facetable Indique s’il faut activer le champ à référencer dans les requêtes à facettes. Généralement utilisé dans une présentation des résultats de recherche qui comprend le nombre d’accès par catégorie (par exemple, rechercher des appareils photo numériques et voir les résultats par marque, par mégapixels, par prix, etc.). Cet attribut doit être null pour les champs complexes. Les champs de type Edm.GeographyPoint ou Collection(Edm.GeographyPoint) ne peuvent pas être facetables. La valeur par défaut est true pour tous les autres champs simples. Pour réduire la taille de l’index, définissez cet attribut false sur sur les champs sur lesquels vous n’aurez pas de facettes.
Analyseur Définit l’analyseur lexical pour la tokenisation des chaînes pendant les opérations d’indexation et de requête. Les valeurs valides pour cette propriété incluent les analyseurs de langage, les analyseurs intégrés et les analyseurs personnalisés. Par défaut, il s’agit de standard.lucene. Cet attribut ne peut être utilisé qu’avec des champs de chaîne pouvant faire l’objet d’une recherche, et il ne peut pas être défini avec searchAnalyzer ou indexAnalyzer. Une fois l’analyseur choisi et le champ créé dans l’index, il ne peut pas être modifié pour le champ. Doit être null pour les champs complexes.
searchAnalyzer Définissez cette propriété conjointement avec indexAnalyzer pour spécifier différents analyseurs lexicals pour l’indexation et les requêtes. Si vous utilisez cette propriété, définissez analyzer sur null et assurez-vous qu’indexAnalyzer est défini sur une valeur autorisée. Les valeurs valides pour cette propriété incluent les analyseurs intégrés et lesanalyseurs personnalisés. Cet attribut ne peut être utilisé qu’avec des champs pouvant faire l’objet d’une recherche. L’analyseur de recherche peut être mis à jour sur un champ existant, car il n’est utilisé qu’au moment de la requête. Doit être null pour les champs complexes.
indexAnalyzer Définissez cette propriété conjointement avec searchAnalyzer pour spécifier différents analyseurs lexicals pour l’indexation et les requêtes. Si vous utilisez cette propriété, définissez analyzer sur null et assurez-vous que searchAnalyzer est défini sur une valeur autorisée. Les valeurs valides pour cette propriété incluent les analyseurs intégrés et lesanalyseurs personnalisés. Cet attribut ne peut être utilisé qu’avec des champs pouvant faire l’objet d’une recherche. Une fois l’analyseur d’index choisi, il ne peut pas être modifié pour le champ. Doit être null pour les champs complexes.
synonymMaps Liste des noms de synonymes à associer à ce champ. Cet attribut ne peut être utilisé qu’avec des champs pouvant faire l’objet d’une recherche. Actuellement, une seule carte de synonymes par champ est prise en charge. L’affectation d’une carte de synonymes à un champ garantit que les termes de requête ciblant ce champ sont développés au moment de la requête à l’aide des règles de la carte de synonymes. Cet attribut peut être modifié sur les champs existants. Doit être null ou une collection vide pour les champs complexes.
fields Liste de sous-champs s’il s’agit d’un champ de type Edm.ComplexType ou Collection(Edm.ComplexType). Doit être null ou vide pour les champs simples. Pour plus d’informations sur la façon et le moment d’utiliser des sous-champs, consultez Comment modéliser des types de données complexes dans Azure AI Search .

Notes

Les champs de type Edm.String qui peuvent être filtrés, triables ou facetables peuvent avoir une longueur maximale de 32 kilo-octets. Cela est dû au fait que les valeurs de ces champs sont traitées comme un seul terme de recherche et que la longueur maximale d’un terme dans Recherche Azure AI est de 32 kilo-octets. Si vous devez stocker plus de texte que celui-ci dans un champ de chaîne unique, vous devez définir explicitement la valeur filtrable, triable et facetable dans votre définition d’index false .

La définition d’un champ comme pouvant faire l’objet d’une recherche, d’un filtre, d’un tri ou d’une facetable a un impact sur la taille de l’index et les performances des requêtes. Ne définissez pas ces attributs sur des champs qui ne sont pas destinés à être référencés dans les expressions de requête.

Si un champ n’est pas défini comme pouvant faire l’objet d’une recherche, d’un filtre, d’un tri ou d’une facetable, le champ ne peut pas être référencé dans une expression de requête. Cela est utile pour les champs qui ne sont pas utilisés dans les requêtes, mais qui sont nécessaires dans les résultats de la recherche.

Notes

Le nombre maximal d’index que vous pouvez créer varie selon le niveau tarifaire. Pour plus d’informations, consultez Limites du Service.

response

Pour que votre demande aboutisse, vous devez voir le code d’état « 201 créé ».

Par défaut, le corps de la réponse contient le JSON pour la définition d’index. Toutefois, si l’en-tête Prefer de demande est défini sur return=minimal, le corps de la réponse est vide et le code de réussite status est « 204 Aucun contenu » au lieu de « 201 Créé ». Cela est vrai, que la méthode utilisée pour créer l'index soit PUT ou POST.

Exemples

Exemple : schéma d’index

{
  "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" },
    { "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 },
          { "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" }
        ]
    }
  ],
  "suggesters": [
      { "name": "sg", "searchMode": "analyzingInfixMatching", "sourceFields": ["HotelName"] }
  ],
  "analyzers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
      "name": "tagsAnalyzer",
      "charFilters": [ "html_strip" ],
      "tokenizer": "standard_v2"
    }
  ]
}  

Exemple : suggesteurs

 "suggesters": [  
   {  
     "name": "name of suggester",  
     "searchMode": "analyzingInfixMatching",  
     "sourceFields": ["field1", "field2", ...]  
   }  
 ]

Un suggesteur est référencé par son nom sur les demandes de requête qui incluent l’API Suggestions ou l’API Autocomplete, selon que vous souhaitez retourner une correspondance ou le reste d’un terme de requête. Pour plus d’informations sur la création et l’utilisation d’un suggesteur, consultez Créer un suggesteur.

Exemple : Similarité pour la pertinence de la recherche

Cette propriété définit l’algorithme de classement utilisé pour créer un score de pertinence dans les résultats de recherche d’une requête de recherche en texte intégral. Dans les services créés après le 15 juillet 2020, cette propriété est ignorée, car l’algorithme de similarité est toujours BM25. Pour les services existants créés avant le 15 juillet 2020, vous pouvez choisir BM25 en définissant cette construction comme suit :

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

Exemple : Options CORS

JavaScript côté client ne peut pas appeler d’API par défaut, car le navigateur empêche toutes les demandes cross-origin. Pour autoriser les requêtes cross-origin à votre index, activez CORS (Cross-origin resource sharing (Wikipedia)) en définissant l’attribut corsOptions . Pour des raisons de sécurité, seules les API de requête prennent en charge 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)  
     }
}

Exemple : clés de chiffrement

Les clés de chiffrement sont des clés gérées par le client utilisées pour un chiffrement supplémentaire. Pour plus d’informations, consultez Chiffrement à l’aide de clés gérées par le client dans 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)"}
      }
} 

Exemple : Profils de scoring

Un profil de scoring est une section du schéma qui définit des comportements de scoring personnalisés qui vous permettent d’influencer les documents qui apparaissent plus haut dans les résultats de la recherche. Les profils de calcul de score sont constitués de pondérations et de fonctions de champ. Pour les utiliser, vous spécifiez un profil par nom dans la chaîne de requête. Pour plus d’informations, consultez Ajouter des profils de scoring à un index de recherche pour plus d’informations.

{
   "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"  
       }  
 ]
}

Exemple : Cartes de synonymes

Après avoir créé une carte de synonymes sur votre service de recherche, vous pouvez l’affecter à searchable des champs de type Edm.String ou Collection(Edm.String) dans un index. La définition d’index ci-dessous configure le champ « genre » pour utiliser la carte de synonymes « mysynonymmap ».

Vous pouvez utiliser Update Index pour ajouter cette propriété à un champ existant. Une propriété synonymMaps de champ spécifie la carte (une par champ). Vous pouvez mettre à jour les synonymMaps propriétés des champs existants à tout moment.

Interrogez comme d’habitude, à l’aide de termes ou d’expressions (entre guillemets). Dans Azure AI Search, les termes en deux parties, tels que « bain à remous », doivent être exprimés sous forme d’expression, sinon chaque terme est évalué indépendamment. Si vous recherchez « bain à remous », le moteur de recherche recherche cette expression ainsi que tous les synonymes que vous avez définis, comme le jacuzzi.

POST /indexes?api-version=2020-06-30
{
    "name":"myindex",
    "fields":[
    ...
        {
            "name":"genre",
            "type":"Edm.String",
            "searchable":true,
            "analyzer":"en.lucene",
            "synonymMaps": [
                "mysynonymmap"
            ]
        }
    ]
    ...
}

Voir aussi