Partager via


Extension Visual Studio Code pour Recherche cognitive Azure (mise hors service)

L’extension Visual Studio Code pour Recherche cognitive Azure, précédemment en préversion, n’est pas passée à la disponibilité générale et est maintenant mise hors service à compter du 1er novembre 2022.

Bien que l’extension ne soit plus disponible dans Place de marché Azure, le code est open source à l’adresse https://github.com/microsoft/vscode-azurecognitivesearch. Vous pouvez cloner et modifier l’outil pour votre propre utilisation.

Si vous utilisez l’extension, cet article explique comment formuler des requêtes d’API REST de manière interactive à l’aide des API REST Recherche cognitive Azure.

Prérequis

Les services et outils suivants sont requis pour l’utilisation de l’extension

Installer l’extension

Consultez le fichier Lisez-moi sur Github.

Connexion à votre abonnement

Démarrez Visual Studio COde.

Sélectionnez Connectez-vous à Azure... et connectez-vous à votre compte Azure.

Vos abonnements devraient s’afficher. Dans la capture d’écran suivante, le nom de l’abonnement est « Visual Studio Enterprise » et contient un service de recherche nommé « azsearch-service ».

Abonnements Azure dans VS Code

Pour limiter les abonnements affichés, ouvrez la palette de commandes (Ctrl+Maj+P ou Cmd+Maj+P) et recherchez Azure ou Sélectionner des abonnements. Des commandes sont également disponibles pour la connexion et la déconnexion de votre compte Azure.

Lorsque vous développez le service de recherche, des éléments d’arborescence s’affichent pour chacune des éléments de Recherche cognitive : index, sources de données, indexeurs, compétences, mappages de synonymes et alias.

Arborescence de recherche Azure dans VS Code

Ces éléments d’arborescence peuvent être développés pour montrer toutes les ressources que vous avez dans votre service de recherche.

1 – Créer un index

Pour créer un index, utilisez l’API REST Créer un index.

Avec l’extension VS Code, il vous suffit de vous préoccuper du corps de la demande. Pour ce guide de démarrage rapide, nous fournissons un exemple de définition d’index et les documents correspondants.

Définition de l’index

La définition d’index ci-dessous est un exemple de schéma pour des hôtels fictifs.

La collection fields définit la structure des documents dans l’index de recherche. Chaque champ a un type de données et un certain nombre d’attributs supplémentaires qui déterminent la façon dont le champ peut être utilisé.

{
    "name": "hotels-quickstart",
    "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.lucene"
        },
        {
            "name": "Description_fr",
            "type": "Edm.String",
            "searchable": true,
            "filterable": false,
            "sortable": false,
            "facetable": false,
            "analyzer": "fr.lucene"
        },
        {
            "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
        },
        {
            "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
                }
            ]
        }
    ],
    "suggesters": [
        {
            "name": "sg",
            "searchMode": "analyzingInfixMatching",
            "sourceFields": [
                "HotelName"
            ]
        }
    ]
}

Pour créer un nouvel index, cliquez avec le bouton droit sur Index et sélectionnez Créer un nouvel index. Un éditeur portant un nom similaire à indexes-new-28c972f661.azsindex s’affiche.

Collez la définition d’index ci-dessus dans la fenêtre. Enregistrez le fichier et sélectionnez Charger quand vous y êtes invité, si vous souhaitez mettre à jour l’index. Cette étape crée l’index et l’ajoute à l’arborescence à gauche.

Illustration Gif de la création d’un index

S’il existe un problème avec votre définition d’index, vous devriez voir un message d’erreur similaire à celui ci-dessous.

Message d’erreur de création d’index

Si une erreur se produit, corrigez le problème et réenregistrez le fichier.

2 – Charger des documents

Dans l’API REST, la création de l’index et le remplissage de l’index sont des étapes distinctes. Dans la Recherche cognitive Azure, l’index contient toutes les données pouvant faire l’objet de recherches. Dans ce démarrage rapide, les données sont fournies sous forme de documents JSON. L’API REST Add, Update ou Delete Documents est utilisée pour cette tâche.

Pour ajouter de nouveaux documents à l’index :

  1. Développez l’index hotels-quickstart que vous avez créé. Cliquez avec le bouton droit sur Documents et sélectionnez Créer un document.

    Créer un document

  2. Vous devriez voir un éditeur JSON qui a déduit le schéma de votre index.

    Créer un document JSON

  3. Collez le code JSON ci-dessous, puis enregistrez le fichier. Une invite vous demande de confirmer vos modifications. Sélectionnez Charger pour enregistrer les modifications.

    {
        "HotelId": "1",
        "HotelName": "Secret Point Motel",
        "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.",
        "Category": "Boutique",
        "Tags": [ "pool", "air conditioning", "concierge" ],
        "ParkingIncluded": false,
        "LastRenovationDate": "1970-01-18T00:00:00Z",
        "Rating": 3.60,
        "Address": {
            "StreetAddress": "677 5th Ave",
            "City": "New York",
            "StateProvince": "NY",
            "PostalCode": "10022",
            "Country": "USA"
        } 
    }
    
  4. Répétez ce processus pour les trois documents restants :

    Document 2 :

    {
        "HotelId": "2",
        "HotelName": "Twin Dome Motel",
        "Description": "The hotel is situated in a  nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.",
        "Category": "Boutique",
        "Tags": [ "pool", "free wifi", "concierge" ],
        "ParkingIncluded": false,
        "LastRenovationDate": "1979-02-18T00:00:00Z",
        "Rating": 3.60,
        "Address": {
            "StreetAddress": "140 University Town Center Dr",
            "City": "Sarasota",
            "StateProvince": "FL",
            "PostalCode": "34243",
            "Country": "USA"
        } 
    }
    

    Document 3 :

    {
        "HotelId": "3",
        "HotelName": "Triple Landscape Hotel",
        "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services.",
        "Category": "Resort and Spa",
        "Tags": [ "air conditioning", "bar", "continental breakfast" ],
        "ParkingIncluded": true,
        "LastRenovationDate": "2015-09-20T00:00:00Z",
        "Rating": 4.80,
        "Address": {
            "StreetAddress": "3393 Peachtree Rd",
            "City": "Atlanta",
            "StateProvince": "GA",
            "PostalCode": "30326",
            "Country": "USA"
        } 
    }
    

    Document 4 :

    {
        "HotelId": "4",
        "HotelName": "Sublime Cliff Hotel",
        "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 1800 palace.",
        "Category": "Boutique",
        "Tags": [ "concierge", "view", "24-hour front desk service" ],
        "ParkingIncluded": true,
        "LastRenovationDate": "1960-02-06T00:00:00Z",
        "Rating": 4.60,
        "Address": {
            "StreetAddress": "7400 San Pedro Ave",
            "City": "San Antonio",
            "StateProvince": "TX",
            "PostalCode": "78216",
            "Country": "USA"
        }
    }
    

À ce stade, vous devriez voir les quatre documents disponibles dans la section des documents.

état après le chargement de tous les documents

3 – Rechercher dans un index

Maintenant que l’index contient du contenu, vous pouvez émettre des requêtes à l’aide de l’API REST de recherche de documents :

  1. Cliquez avec le bouton droit sur l’index que vous souhaitez rechercher et sélectionnez Rechercher. Cette étape ouvre un éditeur portant un nom similaire à sandbox-b946dcda48.azs.

    vue de la recherche de l’extension

  2. Une requête simple est remplie automatiquement. Appuyez sur Ctrl+Alt+R ou Cmd+Alt+R pour envoyer la requête. Les résultats s’affichent dans une fenêtre à gauche.

    résultats de la recherche dans l’extension

Exemples de requêtes

Essayez quelques autres exemples de requête pour avoir un aperçu de la syntaxe. Vous pouvez essayer quatre requêtes supplémentaires ci-dessous. Vous pouvez ajouter plusieurs requêtes adressées au même éditeur. Lorsque vous appuyez sur Ctrl+Alt+R ou Cmd+Alt+R, la ligne de votre curseur détermine quelle requête sera envoyée.

requêtes et résultats côte à côte

Dans la première requête, nous effectuons une recherche dans boutique en sélectionnant (select) seulement certains champs. C’est une bonne pratique que d’appliquer un select seulement aux champs dont vous avez besoin, car l’extraction de données inutiles peut ajouter de la latence à vos requêtes. La requête définit également $count=true pour retourner le nombre total de résultats avec les résultats de la recherche.

// Query example 1 - Search `boutique` with select and return count
search=boutique&$count=true&$select=HotelId,HotelName,Rating,Category

Dans la requête suivante, nous spécifions le terme de recherche wifi et nous incluons aussi un filtre pour retourner seulement les résultats où l’état est égal à 'FL'. Les résultats sont également classés selon la valeur du champ Rating de l’hôtel.

// Query example 2 - Search with filter, orderBy, select, and count
search=wifi&$filter=Address/StateProvince eq 'FL'&$select=HotelId,HotelName,Rating,Address/StateProvince&$orderby=Rating desc

Ensuite, la recherche est limitée à un seul champ pouvant faire l’objet d’une recherche en utilisant le paramètre searchFields. Il s’agit d’une option intéressante pour améliorer l’efficacité de votre requête si vous savez que vous êtes intéressé seulement par les correspondances dans certains champs.

// Query example 3 - Limit searchFields
search=sublime cliff&$select=HotelId,HotelName,Rating&searchFields=HotelName

Une autre option courante à inclure dans une requête est facets. Les facettes vous permettent de créer des filtres sur votre application pour permettre aux utilisateurs de connaître facilement les valeurs sur lesquelles ils peuvent filtrer.

// Query example 4 - Take the top two results, and show only HotelName and Category in the results
search=*&$select=HotelId,HotelName,Rating&searchFields=HotelName&facet=Category

Ouvrir l’index dans le portail

Si vous souhaitez afficher votre service de recherche dans le portail, cliquez avec le bouton droit sur le nom du service de recherche et sélectionnez Ouvrir dans le portail.

Nettoyer les ressources

Lorsque vous travaillez dans votre propre abonnement, il est recommandé, à la fin de chaque projet, de déterminer si vous avez toujours besoin des ressources que vous avez créées. Les ressources laissées en cours d’exécution peuvent vous coûter de l’argent. Vous pouvez supprimer les ressources une par une, ou choisir de supprimer le groupe de ressources afin de supprimer l’ensemble des ressources.

Vous pouvez rechercher et gérer les ressources dans le portail à l’aide des liens Toutes les ressources ou Groupes de ressources situés dans le volet de navigation de gauche.

Si vous utilisez un service gratuit, n’oubliez pas que vous êtes limité à trois index, indexeurs et sources de données. Vous pouvez supprimer des éléments un par un dans le portail pour ne pas dépasser la limite.

Étapes suivantes

Maintenant que vous savez comment effectuer des tâches principales, vous pouvez aller de l’avant avec des appels d’API REST supplémentaires pour des fonctionnalités plus avancées, telles que les indexeurs ou la configuration d’un pipeline d’enrichissement qui ajoute des transformations de contenu à l’indexation. Pour les étapes suivantes, nous vous recommandons le lien suivant :