Interrogation de valeurs de champs de métadonnées gérées
Dernière modification : jeudi 15 avril 2010
S’applique à : SharePoint Server 2010
Dans cet article
Requêtes CAML
Requêtes de recherche
Exemples
Dans Microsoft SharePoint Server 2010, vous devez faire attention lors de la construction de requêtes conçues pour renvoyer des résultats qui représentent des éléments qui ont été balisés avec des valeurs dans une colonne de métadonnées gérées. SharePoint Server 2010 prend en charge le renvoi de valeurs de métadonnées avec ou sans étendue à partir de la base de données TermStore, que vous écriviez une requête Langage CAML (Collaborative Application Markup Language) et utilisiez une API (telle que l’objet SPQuery) pour obtenir des éléments à partir d’une liste spécifique ou que vous utilisiez une API (telle que Query) pour exécuter des requêtes de recherche.
Requêtes CAML
Lors de l’écriture d’une requête Langage CAML (Collaborative Application Markup Language) pour renvoyer des éléments à partir d’un objet SPList qui sont balisés avec une valeur spécifique dans une colonne de métadonnées gérées, vous devez spécifier l’ID de recherche de l’élément à mettre en correspondance. Les ID de recherche sont spécifiques à la collection de sites ; un terme donné possède un ID de recherche différent pour chaque collection de sites où il est utilisé. Pour obtenir l’ID de recherche d’un terme, vous pouvez utiliser soit la méthode GetWssIdsOfKeywordTerm(), soit la méthode GetWssIdsOfKeywordTerm() si le terme est un mot clé (si la propriété IsKeyword du terme a la valeur true). Dans certains scénarios, un même terme peut avoir plusieurs ID de recherche pour la même collection de sites ; par exemple, un terme fusionné possède un ID de recherche pour chaque terme qui a été utilisé dans la collection de sites et fusionné ultérieurement dans le terme unique. Une fois que vous avez trouvé les ID de recherche d’un terme, vous pouvez les combiner en une clause IN dans une requête Langage CAML (Collaborative Application Markup Language) afin de rechercher les éléments balisés avec ce terme. La requête Langage CAML (Collaborative Application Markup Language) ci-dessous recherche les éléments d’une liste dont le champ ItemType contient l’ID de recherche 14 et l’ID de recherche 15.
<Query><Where><In><FieldRef LookupId="TRUE" Name="ItemType" /><Values><Value Type="Integer">14</Value><Value Type="Integer">15</Value></Where></Query>
Vous pouvez générer des requêtes qui incluent des ID de recherche pour plusieurs termes. Une tâche courante consiste à générer une requête qui obtient des éléments balisés avec un terme spécifié ou l’un des termes descendants de ce terme. En passant la valeur true au paramètre bool includeDescendants à TaxonomyField.GetWssIdsOfKeywordTerm, vous obtenez les ID de recherche du terme avec le GUID spécifié, ainsi que les ID de tous ses éléments enfants.
Requêtes de recherche
La recherche crée automatiquement des propriétés indexées qui correspondent à des champs de métadonnées gérées, ce qui facilite la recherche d’éléments qui ont été balisés avec des valeurs de métadonnées gérées spécifiques, comme détaillé dans le Tableau 1.
Tableau 1. Propriétés de requête de recherche
Property |
Description |
---|---|
ows_tax_idFieldName |
Indexe les ID des termes dans le champ FieldName pour chaque élément analysé. Cette propriété est mappée à la propriété owsTaxIdFieldName de la propriété gérée, ce qui vous permet de rechercher les éléments analysés qui sont balisés dans ce champ avec un terme ayant l’ID de terme spécifié. |
ows_FieldName |
Indexe l’étiquette des termes dans le champ FieldName pour chaque élément analysé. Seule l’étiquette du terme qui a été utilisée pour baliser l’élément est incluse ici ; les autres étiquettes ne sont pas indexées. |
ows_taxid_MetadataAllTagsInfo |
Indexe les ID de tous les termes pour chaque élément analysé, dans tous les champs de métadonnées. Cette propriété est mappée à la propriété owsTaxIdMetadataAllTagsInfo de la propriété gérée, ce qui vous permet de rechercher les éléments analysés qui sont balisés dans un champ quelconque avec un terme ayant l’ID de terme spécifié. |
owsMetadataFacetInfo |
Cette propriété extractible maintient une structure de données qui contient des informations concernant tous les termes sur un élément parmi tous les champs de métadonnées. Voici le format de cette structure de données : ColmunInternalName|ColumnDisplayName|CompressedGuid(StoreId)|CompressedGuid(TermSetId)|CompressedGuid(TermId)|CurrentLabel;# |
Exemples
Les exemples répertoriés dans le Tableau 2 montrent des requêtes qui recherchent des éléments qui contiennent le mot clé Turtle et qui sont également balisés avec une combinaison champ/valeur spécifique.
Tableau 2. Exemples de chaînes de requête de recherche
Exemple |
Chaîne de requête |
Remarques |
---|---|---|
Un terme unique, reference materials, dans le champ ItemType: |
http://contoso/searchcenter/pages/results.aspx?k=turtle&r="owstaxIdItemType"=#052263385-1fc3-4323-8d6b-50c8f6c3c45d:"reference materials” |
#0 dans la chaîne de requête avant l’ID de terme signifie qu’il faut rechercher uniquement l’ID de terme spécifié. |
Le terme reference materials ou n’importe lequel de ses descendants dans le champ ItemType : |
http://contoso/searchcenter/pages/results.aspx?k= turtle &r="owstaxIdItemType"=#52263385-1fc3-4323-8d6b-50c8f6c3c45d:"reference materials" |
# avant l’ID de terme signifie qu’il faut rechercher l’ID de terme spécifié ou l’ID de l’un des termes enfants de ce terme. |
Un terme unique parmi n’importe lequel de ses champs : |
http://contoso/searchcenter/pages/results.aspx?k= turtle &r=owstaxIdMetadataAllTagsInfo=#052263385-1fc3-4323-8d6b-50c8f6c3c45d:"reference materials" |
L’exemple de code suivant montre comment effectuer une recherche sur des valeurs de champs de métadonnées.
using System;
using System.IO;
using System.Globalization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Taxonomy;
namespace Microsoft.SDK.SharePointServer.Samples
{
// We are trying to get all the Wss IDs of this term when used as a keyword.
int[] wssIds = TaxonomyField.GetWssIdsOfKeywordTerm(site, term.Id, 500);
Console.Write("The wss ID's of your term are");
if (wssIds.Length == 0)
{
Console.Write(" empty");
}
else
{
foreach (int wssId in wssIds)
{
Console.WriteLine(" " + wssId.ToString());
}
}
Console.WriteLine(".");
}
/// <summary>
/// This method writes to the console the Wss ID values of the managed metadata term
/// on the specified SPSite.
/// </summary>
private void TestGetWssIdsOfTerm(SPSite site, Term term)
{
if (term == null)
{
throw new ArgumentException("Parameter term cannot be null");
}
if (site == null)
{
throw new ArgumentException("Parameter site cannot be null");
}
// We are trying to get all the Wss IDs of this term without its children.
int[] wssIds = TaxonomyField.GetWssIdsOfTerm(site, term.TermStore.Id, term.TermSet.Id, term.Id, false /*includeDescendants*/, 500);
Console.Write("The wss ID's of your term are");
if (wssIds.Length == 0)
{
Console.Write(" empty");
}
else
{
foreach (int wssId in wssIds)
{
Console.Write(" " + wssId.ToString());
}
}
Console.WriteLine(".");
}
}
}