Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La navigation à facettes est utilisée pour le filtrage auto-dirigé sur les résultats de requête dans une application de recherche, où votre application propose des contrôles de formulaire pour la recherche étendue à des groupes de documents (par exemple, des catégories ou des marques) et Azure AI Search fournit les structures de données et les filtres pour sauvegarder l’expérience.
Dans cet article, découvrez les étapes de retour d’une structure de navigation à facettes dans Recherche IA Azure. Une fois que vous êtes familiarisé avec les concepts de base et les clients, passez aux Exemples de facettes pour connaître la syntaxe dans différents cas d’usage, y compris l’activation de facettes de base et les dénombrements distincts.
D’autres fonctionnalités de facette sont disponibles via les API en préversion :
- structures de facettes hiérarchiques
- filtrage de facettes
- agrégations de facettes
Les exemples de navigation par facettes fournissent la syntaxe et l’utilisation des fonctionnalités en préversion.
Navigation à facettes dans une page de recherche
Les facettes sont dynamiques, car elles se basent sur chaque ensemble de résultats de requête spécifique. Une réponse de recherche s’affiche avec tous les compartiments de facettes utilisées pour parcourir les documents dans le résultat. La requête s’exécute en premier, puis les facettes sont extraites des résultats actuels et assemblées en une structure de navigation à facettes.
Dans Recherche Azure AI, les facettes sont profondes d’une couche et ne peuvent pas être hiérarchiques, sauf si vous utilisez l’API en préversion. Si vous ne connaissez pas les structures de navigation à facettes, l’exemple suivant en affiche une sur la gauche. Les nombres indiquent le nombre de correspondances pour chaque facette. Le même document peut être représenté dans plusieurs facettes.
Les facettes peuvent vous aider à trouver ce que vous recherchez, tout en vous assurant d’obtenir au moins un résultat. En tant que développeur, les facettes vous permettent d’exposer les critères de recherche les plus utiles pour naviguer dans votre index de recherche.
Navigation à facettes dans le code
Les facettes sont activées sur les champs pris en charge dans un index, puis spécifiées sur une requête. La structure de navigation à facettes est retournée au début de la réponse, suivie des résultats.
L’exemple REST suivant est une requête vide ("search": "*"
) étendue à l’index entier (voir l’exemple d’hôtels intégrés). Le facets
paramètre spécifie le champ « Catégorie ».
POST https://{{service_name}}.search.windows.net/indexes/hotels/docs/search?api-version={{api_version}}
{
"search": "*",
"queryType": "simple",
"select": "",
"searchFields": "",
"filter": "",
"facets": [ "Category"],
"orderby": "",
"count": true
}
La réponse de l’exemple commence par la structure de navigation à facettes. La structure se compose de valeurs « Catégorie » et d’un nombre d’hôtels pour chacune d’elles. Il est suivi par le reste des résultats de la recherche, réduit ici à un seul document pour la concision. Cet exemple fonctionne bien pour plusieurs raisons. Le nombre de facettes pour ce champ est inférieur à la limite (la valeur par défaut est de 10), de sorte qu’elles s’affichent toutes et que chaque hôtel de l’index de 50 hôtels est représenté dans exactement une de ces catégories.
{
"@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels')/$metadata#docs(*)",
"@odata.count": 50,
"@search.facets": {
"Category": [
{
"count": 13,
"value": "Budget"
},
{
"count": 12,
"value": "Resort and Spa"
},
{
"count": 9,
"value": "Luxury"
},
{
"count": 7,
"value": "Boutique"
},
{
"count": 5,
"value": "Suite"
},
{
"count": 4,
"value": "Extended-Stay"
}
]
},
"value": [
{
"@search.score": 1.0,
"HotelId": "1",
"HotelName": "Stay-Kay City Hotel",
"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,
},
. . .
]
}
Activer les facettes sur des champs
Vous pouvez ajouter des facettes à de nouveaux champs qui contiennent du texte brut ou du contenu numérique. Les types de données pris en charge incluent des chaînes, des dates, des champs booléens et des champs numériques (mais pas des vecteurs).
Vous pouvez utiliser le portail Azure, les API REST, les kits SDK Azure ou toute méthode qui prend en charge la création ou la mise à jour de schémas d’index dans Azure AI Search. Pour commencer, identifiez les champs à utiliser pour le facettage.
Choisir les champs à attribuer
Vous pouvez calculer des facettes sur la base de champs à une seule valeur et de collections. Les champs qui fonctionnent le mieux dans la navigation à facettes présentent les caractéristiques suivantes :
- Contenu lisible par l’homme (non-vecteur).
- Faible cardinalité (quelques valeurs distinctes qui se répètent dans les documents de votre corpus de recherche).
- Valeurs descriptives courtes (un ou deux mots) qui s’affichent correctement dans une arborescence de navigation.
Les valeurs d’un champ, et non le nom de champ lui-même, produisent les facettes dans une structure de navigation à facettes. Si la facette est un champ de chaîne nommé Couleur, les facettes sont bleues, vertes et de toute autre valeur pour ce champ. Passez en revue les valeurs de champ pour vous assurer qu’il n’y a pas de fautes de frappe, de valeurs nulles ou de différences de casse. Envisagez d’affecter un normaliseur à un champ filtrable et facetable pour lisser les variations mineures dans le texte. Par exemple, « Canada », « CANADA » et « canada » seraient tous normalisés en un seul compartiment.
Éviter les champs non pris en charge
Vous ne pouvez pas définir de facettes sur des champs existants, sur des champs vectoriels ou des champs de type Edm.GeographyPoint
ou Collection(Edm.GeographyPoint)
.
Dans des collections de champs complexes, « facetable » doit être nul.
Commencer par les nouvelles définitions de champ
Les attributs qui affectent la façon dont un champ est indexé ne peuvent être définis que lorsque les champs sont créés. Cette restriction s’applique aux facettes et aux filtres.
Si votre index existe déjà, vous pouvez ajouter une nouvelle définition de champ qui fournit des facettes. Les documents existants dans l’index obtiennent une valeur Null pour le nouveau champ. Cette valeur Null est remplacée la prochaine fois que vous actualisez l’index.
Dans la page des services de recherche du portail Azure, accédez à l’onglet Champs de l’index, puis sélectionnez Ajouter un champ.
Fournissez un nom, un type de données et des attributs. Nous vous recommandons d’ajouter des filtres filtrables, car il est courant de définir des filtres en fonction d’un compartiment de facettes dans la réponse. Nous vous recommandons de trier, car les filtres produisent des résultats non triés et vous souhaiterez peut-être les trier dans votre application.
Vous pouvez également définir le champ comme recherchable si vous souhaitez également le prendre en charge pour la recherche en texte intégral, et comme récupérable si vous souhaitez inclure le champ dans la réponse de recherche.
Enregistrez la définition du champ.
Retourner des facettes dans une requête
Rappelez-vous que les facettes sont calculées dynamiquement à partir des résultats dans une réponse de requête. Vous obtenez uniquement des facettes pour les documents trouvés par la requête actuelle.
Utilisez la vue JSON dans l’Explorateur de recherche pour définir des paramètres de facette dans le portail Azure.
- Sélectionnez un index et ouvrez l’Explorateur de recherche en mode JSON.
- Fournissez une requête au format JSON. Vous pouvez le taper, copier le JSON à partir d’un exemple REST ou utiliser IntelliSense pour faciliter la syntaxe. Reportez-vous à l’exemple REST de l’onglet suivant pour obtenir des informations de référence sur les expressions de facette.
- Sélectionnez Recherche pour retourner les résultats à facettes, articulés en JSON.
Voici une capture d’écran de l’exemple de requête de facette de base sur l’exemple d’index d’hôtels. Vous pouvez coller d’autres exemples dans cet article pour renvoyer les résultats dans l’Explorateur de recherche.
Meilleures pratiques concernant l’utilisation de facettes
Cette section est une collection de conseils et de solutions de contournement utiles pour le développement d’applications.
Nous vous recommandons C# : Ajouter une recherche à des applications web pour obtenir un exemple de navigation par facettes qui inclut du code pour la couche présentation. L’exemple inclut également des filtres, des suggestions et la saisie semi-automatique. Il utilise JavaScript et React pour la couche de présentation.
Initialiser une structure de navigation à facettes avec une chaîne de recherche non qualifiée ou vide
Il est utile d’initialiser une page de recherche avec une requête ouverte ("search": "*"
) pour remplir complètement la structure de navigation à facettes. Dès que vous transmettez des termes de requête dans la demande, la structure de navigation à facettes se limite aux correspondances dans les résultats, plutôt qu’à la totalité de l’index. Cette pratique est utile pour vérifier les comportements de facette et de filtre pendant les tests. Si vous incluez des critères de correspondance dans la requête, la réponse exclut les documents qui ne correspondent pas, ce qui a l’effet en aval potentiel d’exclure des facettes.
Effacer les facettes
Lorsque vous concevez l’expérience utilisateur, n’oubliez pas d’ajouter un mécanisme pour effacer les facettes. Une approche courante pour effacer les facettes consiste à émettre une requête ouverte pour réinitialiser la page.
Désactiver la facette pour économiser le stockage et améliorer les performances
Pour optimiser les performances et le stockage, définissez "facetable": false
les champs qui ne doivent jamais être utilisés comme facette. Les exemples incluent des champs de chaîne pour des valeurs uniques, telles qu’un ID ou un nom de produit, pour empêcher leur utilisation accidentelle (et inefficace) dans la navigation à facettes. Cette bonne pratique est particulièrement importante pour l’API REST, qui active les filtres et les facettes sur les champs de chaîne par défaut.
N’oubliez pas que vous ne pouvez pas utiliser Edm.GeographyPoint
ou Collection(Edm.GeographyPoint)
champs dans la navigation à facettes. Rappelez-vous que les facettes fonctionnent mieux sur les champs avec une faible cardinalité. En raison de la résolution des géo-coordonnées, il est rare que deux ensembles de coordonnées soient égaux dans un jeu de données donné. Par conséquent, les facettes ne sont pas prises en charge pour les coordonnées géographiques. Vous devez utiliser un champ ville ou région pour filtrer par emplacement.
Rechercher des données corrompues
Lorsque vous préparez des données pour l’indexation, vérifiez les champs pour les valeurs Null, les fautes d’orthographe ou les différences de cas, ainsi que les versions uniques et plurielles du même mot. Par défaut, les filtres et les facettes ne subissent aucune analyse lexicale ni vérification orthographique, ce qui signifie que toutes les valeurs d’un champ « à facettes » sont des facettes potentielles, même si les mots diffèrent d’un caractère.
Les normaliseurs peuvent atténuer les différences de données, en rectifiant les variations de casse et de caractères. Sinon, pour inspecter vos données, vous pouvez vérifier les champs à leur source ou exécuter des requêtes qui retournent des valeurs à partir de l’index.
Un index n’est pas le meilleur endroit pour corriger les valeurs null ou non valides. Vous devez résoudre les problèmes de données dans votre source, en supposant qu’il s’agit d’une base de données ou d’un stockage persistant, ou dans une étape de nettoyage des données que vous effectuez avant l’indexation.
Classement des compartiments de facettes
Bien que vous puissiez trier dans un compartiment, il n’existe aucun paramètre pour contrôler l’ordre des compartiments de facettes dans la structure de navigation dans son ensemble. Si vous souhaitez des compartiments à facettes dans un ordre spécifique, vous devez le fournir dans le code d’application.
Différences dans les nombres de facettes
Sous certaines circonstances, vous pouvez constater que les nombres de facettes ne sont pas précis en raison de l’architecture de partitionnement. Chaque index de recherche est réparti sur plusieurs fragments, et chacun d'eux indique les N principales facettes par nombre de documents, qui sont ensuite combinées en un résultat unique. Étant donné que ce ne sont que les N premières facettes pour chaque partition, il est possible de manquer ou de sous-compter les documents correspondants dans la réponse de facette.
Pour garantir la précision, vous pouvez augmenter artificiellement la valeur de count:<number> afin de forcer la création de rapports complète à partir de chaque partition. Vous pouvez spécifier "count": "0"
pour des facettes illimitées. Vous pouvez également définir « count » sur une valeur supérieure ou égale au nombre de valeurs uniques du champ à facettes. Par exemple, si vous créez des facettes pour un champ « taille » contenant cinq valeurs uniques, vous pouvez définir "count:5"
pour vous assurer que toutes les correspondances sont représentées dans la réponse de facette.
La contrepartie de cette solution de contournement est une augmentation de la latence des requêtes, aussi ne l'utilisez que si nécessaire.
Conserver une structure de navigation par facettes de manière asynchrone par rapport aux résultats filtrés
Dans Recherche d’IA Azure, les facettes existent uniquement pour les résultats actuels. Toutefois, il est courant de conserver un ensemble statique de facettes afin que l’utilisateur puisse naviguer dans l’inverse, en retracant les étapes permettant d’explorer d’autres chemins par le biais du contenu de recherche.
Si vous souhaitez un ensemble statique de facettes avec une expérience d’exploration dynamique, vous pouvez l’implémenter à l’aide de deux requêtes filtrées : une étendue aux résultats, l’autre utilisée pour créer une liste statique de facettes à des fins de navigation.
Décaler des nombres de facettes volumineux par le biais de filtres
Les résultats de recherche et les résultats de facette trop volumineux peuvent être supprimés en ajoutant des filtres. Dans l’exemple suivant, dans la requête pour le cloud computing, 254 éléments ont une spécification interne en tant que type de contenu. Si les résultats sont trop volumineux, l’ajout de filtres peut aider vos utilisateurs à affiner la requête en ajoutant d’autres critères.
Les éléments ne sont pas mutuellement exclusifs. Si un élément répond aux critères des deux filtres, il est compté dans chacun d'eux. La duplication est possible lors de l’utilisation des facettes sur les champs Collection(Edm.String)
, souvent utilisés pour implémenter le balisage de document.
Search term: "cloud computing"
Content type
Internal specification (254)
Video (10)