Statistiques et statut de recherche Dataverse
La recherche Dataverse fournit deux opérations que vous pouvez utiliser pour récupérer des données sur les structures de données utilisées pour prendre en charge la recherche et vérifier si la recherche est activée.
Statistiques
Vous devrez peut-être connaître la taille de la structure de données renvoyée pour vous aider à mieux optimiser votre requête ou vos résultats de requête et vous aider à gérer la taille de votre base de données afin de gérer les coûts.
Les statistiques de recherche fournissent des informations sur :
- Taille de stockage en octets
- Taille de stockage en mégaoctets
- Nombre de documents
Exemples de statistiques
Les exemples suivants montrent comment utiliser l’API statistics
.
Cet exemple est tiré de l’exemple du SDK pour les opérations de recherche .NET sur GitHub.
/// <summary>
/// Demonstrate statistics API
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <returns></returns>
static void OutputSearchStatistics(IOrganizationService service)
{
Console.WriteLine("OutputSearchStatistics START\n");
var searchstatisticsResponse = (searchstatisticsResponse)service.Execute(new searchstatisticsRequest());
JObject ResponseObj = (JObject)JsonConvert.DeserializeObject(value: searchstatisticsResponse.response);
SearchStatisticsResult results = ResponseObj["value"].ToObject<SearchStatisticsResult>();
Console.WriteLine($"\tStorageSizeInBytes: {results.StorageSizeInByte}");
Console.WriteLine($"\tStorageSizeInMb: {results.StorageSizeInMb}");
Console.WriteLine($"\tDocumentCount: {results.DocumentCount}");
Console.WriteLine("\nOutputSearchStatistics END");
}
Sortie
Lorsque vous appelez la méthode OutputSearchStatistics
avec une instance authentifiée de la classe ServiceClient :
OutputSearchStatistics(service: serviceClient);
Le résultat ressemble à ce qui suit :
OutputSearchStatistics START
StorageSizeInBytes: 1341090
StorageSizeInMb: 1
DocumentCount: 1309
OutputSearchStatistics END
Classes de soutien
La méthode OutputSearchStatistics
dépend des classes de soutien suivantes pour envoyer la requête et traiter le résultat :
Classes searchstatisticsRequest et searchstatisticsResponse
Ces classes sont générées à l’aide de la commande de CLI Power Platform pac modelbuilder build comme décrit dans Générer des classes à liaison anticipée pour le SDK pour .NET.
Classe SearchStatisticsResult
Utilisée pour désérialiser la propriété searchstatisticsResponse.response.value
.
class SearchStatisticsResult
{
/// <summary>
/// The storage size in Bytes
/// </summary>
[JsonProperty(PropertyName = "storagesizeinbytes")]
public long StorageSizeInByte { get; set; }
/// <summary>
/// The storage size in Megabytes
/// </summary>
[JsonProperty(PropertyName = "storagesizeinmb")]
public long StorageSizeInMb { get; set; }
/// <summary>
/// The document count
/// </summary>
[JsonProperty(PropertyName = "documentcount")]
public long DocumentCount { get; set; }
}
Status
Utilisez le statut de recherche pour savoir :
- Recherche activée ou non.
- Les tables et les colonnes activées pour la recherche.
Types de réponse de statut
L’opération d’état renvoie des données en utilisant les types suivants :
searchstatusResponse.response.value
La propriété searchstatusResponse.response
a une propriété value
avec les propriétés suivantes :
Nom | Type | Description |
---|---|---|
entitystatusresults |
EntityStatusInfo[] | Contient des informations sur l’état des tables activées pour la recherche. |
manytomanyrelationshipsyncstatus |
ManyToManyRelationshipSyncStatus[] | Contient des informations sur l’état de synchronisation des relations plusieurs à plusieurs. |
status |
Statut | Indique l’état d’une table et/ou de l’index dans son ensemble. |
lockboxstatus |
LockBoxStatus | Indique le statut de la lockbox. |
cmkstatus |
CMKStatus | Indique l’état de la clé gérée par le client. |
EntityStatusInfo
Contient des informations sur l’état des tables activées pour la recherche.
Nom | Type | Description |
---|---|---|
entitylogicalname |
string | Nom logique de la table |
objecttypecode |
string | Code de type d’objet de la table. |
primarynamefield |
string | Colonne principale de la table. |
lastdatasynctimestamp |
string | Dernière heure de synchronisation. |
lastprincipalobjectaccesssynctimestamp |
string | Heure de synchronisation du dernier accès à l’objet principal. |
entitystatus |
string | Statut du niveau d’entité. |
searchableindexedfieldinfomap |
Dictionnaire<chaîne,FieldStatusInfo> | Le dictionnaire des noms et détails des colonnes indexées. |
FieldStatusInfo
Détails des champs indexés d’une table.
Nom | Type | Description |
---|---|---|
indexfieldname |
string | Nom du champ d’index. |
Status
Indique l’état d’une table et/ou de l’index dans son ensemble.
Nom | active | Description |
---|---|---|
notprovisioned |
0 | L’organisation n’est pas disponible pour la recherche. |
provisioninginprogress |
1 | Mise en service de l’organisation en cours. |
provisioned |
2 | Organisation disponible pour la recherche. |
CMKStatus
Indique l’état de la clé gérée par le client.
Pour plus d’informations : Gérer la clé de chiffrement
Nom | active | Description |
---|---|---|
Unknown |
0 | La recherche Dataverse n’est pas en service. |
Disabled |
1 | La clé gérée par le client est désactivée. |
Enabled |
2 | La clé gérée par le client est activée. |
DisablingInProgress |
3 | La clé gérée par le client est en cours de désactivation. |
EnablingInProgress |
4 | La clé gérée par le client est en cours d’activation. |
LockBoxStatus
Indique le statut de la lockbox.
Pour plus d’informations : Accéder en toute sécurité aux données client à l’aide de Customer Lockbox dans Power Platform (version préliminaire)
Nom | active | Description |
---|---|---|
Unknown |
0 | La recherche Dataverse n’est pas en service. |
Disabled |
1 | Lockbox est désactivée. |
Enabled |
2 | Lockbox est activée. |
DisablingInProgress |
3 | Lockbox est en cours de désactivation. |
EnablingInProgress |
4 | Lockbox est en cours d’activation. |
ManyToManyRelationshipSyncStatus
Contient des informations sur l’état de synchronisation des relations plusieurs à plusieurs.
Nom | Type | Description |
---|---|---|
relationshipName |
string | Nom de la relation. |
relationshipMetadataId |
Identificateur unique | ID de la relation. |
searchEntity |
string | Nom de la table de recherche. |
relatedEntity |
string | Nom de la table de référence. |
searchEntityIdAttribute |
string | Nom de la clé primaire de la table de recherche. |
relatedEntityIdAttribute |
string | Nom de la clé primaire de la table associée. |
intersectEntity |
string | Le nom de la table d’intersection qui prend en charge cette relation plusieurs-à-plusieurs. |
searchEntityObjectTypeCode |
int | Code de type d’objet de la table de recherche. |
lastSyncedVersion |
string | La dernière version synchronisée. |
Exemples de statuts
Les exemples suivants montrent la sortie de l’API d’état.
Cet exemple est tiré de l’exemple du SDK pour les opérations de recherche .NET sur GitHub.
/// <summary>
/// Demonstrate status API
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <returns></returns>
static void OutputSearchStatus(IOrganizationService service)
{
Console.WriteLine("OutputSearchStatus START\n");
var searchStatusResponse = (searchstatusResponse)service.Execute(new searchstatusRequest());
JObject ResponseObj = (JObject)JsonConvert.DeserializeObject(searchStatusResponse.response);
SearchStatusResult results = ResponseObj["value"].ToObject<SearchStatusResult>();
Console.WriteLine($"\tStatus: {results.Status}");
Console.WriteLine($"\tLockboxStatus: {results.LockboxStatus}");
Console.WriteLine($"\tCMKStatus: {results.CMKStatus}");
if (results.Status == SearchStatus.Provisioned)
{
// There will be no results if status is notprovisioned
if (results.EntityStatusInfo?.Count > 0)
{
Console.WriteLine("\tEntity Status Results:\n");
results.EntityStatusInfo.ForEach(result =>
{
Console.WriteLine($"\t\tentitylogicalname: {result.EntityLogicalName}");
Console.WriteLine($"\t\tobjecttypecode: {result.ObjectTypeCode}");
Console.WriteLine($"\t\tprimarynamefield: {result.PrimaryNameField}");
Console.WriteLine($"\t\tlastdatasynctimestamp: {result.LastDataSyncTimeStamp}");
Console.WriteLine($"\t\tlastprincipalobjectaccesssynctimestamp: {result.LastPrincipalObjectAccessSyncTimeStamp}");
Console.WriteLine($"\t\tentitystatus: {result.EntityStatus}");
Console.WriteLine($"\t\tsearchableindexedfieldinfomap:");
result.SearchableIndexedFieldInfoMap.ToList().ForEach(searchableindexedfield =>
{
Console.WriteLine($"\t\t\t{searchableindexedfield.Key}\t indexfieldname:{searchableindexedfield.Value.IndexFieldName}");
});
Console.WriteLine("\n");
});
}
}
Console.WriteLine("OutputSearchStatus END\n");
}
Sortie
Lorsque vous appelez la méthode OutputSearchStatus
avec une instance authentifiée de la classe ServiceClient :
OutputSearchStatus(service: serviceClient);
Le résultat ressemble à ce qui suit :
OutputSearchStatus START
Status: Provisioned
LockboxStatus: Disabled
CMKStatus: Disabled
Entity Status Results:
entitylogicalname: account
objecttypecode: 1
primarynamefield: name
lastdatasynctimestamp: 1555508!10/16/2023 02:21:59
lastprincipalobjectaccesssynctimestamp: 0!10/16/2023 02:22:00
entitystatus: EntitySyncComplete
searchableindexedfieldinfomap:
accountid indexfieldname:a_0
accountnumber indexfieldname:a0w
address1_city indexfieldname:a0x
createdon indexfieldname:i_0
emailaddress1 indexfieldname:a0y
entityimage_url indexfieldname:h_0
modifiedon indexfieldname:j_0
name indexfieldname:d_0
ownerid indexfieldname:b_0
owningbusinessunit indexfieldname:c_0
primarycontactid indexfieldname:a0z
statecode indexfieldname:f_0
statuscode indexfieldname:g_0
telephone1 indexfieldname:a12
telephone2 indexfieldname:a13
versionnumber indexfieldname:e_0
<Additional tables removed for brevity>
OutputSearchStatus END
Classes de soutien
La méthode OutputSearchStatus
dépend des classes de soutien suivantes pour envoyer la requête et traiter le résultat :
Classes searchstatusRequest et searchstatusResponse
Ces classes sont générées à l’aide de la commande de CLI Power Platform pac modelbuilder build comme décrit dans Générer des classes à liaison anticipée pour le SDK pour .NET.
Classe SearchStatusResult
Utilisée pour désérialiser les données searchstatusResponse.response.value.
class SearchStatusResult
{
/// <summary>
/// The current search status
/// </summary>
[JsonProperty("status")]
public SearchStatus Status { get; set; }
/// <summary>
/// The current lockbox status
/// </summary>
[JsonProperty("lockboxstatus")]
public LockboxStatus LockboxStatus { get; set; }
/// <summary>
/// The current customer managed key status
/// </summary>
[JsonProperty("cmkstatus")]
public CMKStatus CMKStatus { get; set; }
/// <summary>
/// Information on enabled tables
/// </summary>
[JsonProperty("entitystatusresults")]
public List<EntityStatusInfo>? EntityStatusInfo { get; set; }
/// <summary>
/// Information about th status of synchronized many-to-many relationships
/// </summary>
[JsonProperty("manytomanyrelationshipsyncstatus")]
public List<ManyToManyRelationshipSyncStatus>? ManyToManyRelationshipSyncStatus { get; set; }
}
Énumération SearchStatus
Utilisée pour désérialiser les données Status.
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.Runtime.Serialization;
[DataContract]
[JsonConverter(typeof(StringEnumConverter))]
public enum SearchStatus
{
/// <summary>
/// Organization is not provisioned for search.
/// </summary>
[EnumMember(Value = "notprovisioned")]
NotProvisioned = 0,
/// <summary>
/// Organization provisioning in progress.
/// </summary>
[EnumMember(Value = "provisioninginprogress")]
ProvisioningInProgress = 1,
/// <summary>
/// Organization provisioned for search.
/// </summary>
[EnumMember(Value = "provisioned")]
Provisioned = 2,
}
Énum LockBoxStatus
Utilisée pour désérialiser les données LockBoxStatus.
using Newtonsoft.Json.Converters;
using System.Runtime.Serialization;
using Newtonsoft.Json;
/// <summary>
/// Indicates the status of the lockbox.
/// </summary>
[DataContract]
[JsonConverter(typeof(StringEnumConverter))]
public enum LockboxStatus
{
/// <summary>
/// Indicates dataverse search is not provisioned.
/// </summary>
[EnumMember]
Unknown = 0,
/// <summary>
/// Indicates lockbox is disabled.
/// </summary>
[EnumMember]
Disabled = 1,
/// <summary>
/// Indicates lockbox is enabled.
/// </summary>
[EnumMember]
Enabled = 2,
/// <summary>
/// Indicates lockbox is disabling in progress.
/// </summary>
[EnumMember]
DisablingInProgress = 3,
/// <summary>
/// Indicates lockbox is enabling in progress.
/// </summary>
[EnumMember]
EnablingInProgress = 4,
}
Énumération CMKStatus
Utilisée pour désérialiser les données CMKStatus.
using Newtonsoft.Json.Converters;
using System.Runtime.Serialization;
using Newtonsoft.Json;
/// <summary>
/// Indicates the status of the customer managed key.
/// </summary>
[DataContract]
[JsonConverter(typeof(StringEnumConverter))]
public enum CMKStatus
{
/// <summary>
/// Indicates dataverse search is not provisioned.
/// </summary>
[EnumMember]
Unknown = 0,
/// <summary>
/// Indicates customer managed key is disabled.
/// </summary>
[EnumMember]
Disabled = 1,
/// <summary>
/// Indicates customer managed key is enabled.
/// </summary>
[EnumMember]
Enabled = 2,
/// <summary>
/// Indicates customer managed key is disabling in progress.
/// </summary>
[EnumMember]
DisablingInProgress = 3,
/// <summary>
/// Indicates customer managed key is enabling in progress.
/// </summary>
[EnumMember]
EnablingInProgress = 4,
}
Classe EntityStatusInfo
Utilisée pour désérialiser les données EntityStatusInfo.
using Newtonsoft.Json;
public sealed class EntityStatusInfo
{
/// <summary>
/// Gets or sets the entity logical name.
/// </summary>
[JsonProperty(PropertyName = "entitylogicalname")]
public string EntityLogicalName { get; set; }
/// <summary>
/// Gets or sets the object type code.
/// </summary>
[JsonProperty(PropertyName = "objecttypecode")]
public int ObjectTypeCode { get; set; }
/// <summary>
/// Gets or sets the primary field name.
/// </summary>
[JsonProperty(PropertyName = "primarynamefield")]
public string PrimaryNameField { get; set; }
/// <summary>
/// Gets or sets the last data sync time.
/// </summary>
[JsonProperty(PropertyName = "lastdatasynctimestamp")]
public string LastDataSyncTimeStamp { get; set; }
/// <summary>
/// Gets or sets the last principal object access sync time.
/// </summary>
[JsonProperty(PropertyName = "lastprincipalobjectaccesssynctimestamp")]
public string LastPrincipalObjectAccessSyncTimeStamp { get; set; }
/// <summary>
/// Gets or sets entity level status.
/// </summary>
[JsonProperty(PropertyName = "entitystatus")]
public string EntityStatus { get; set; }
/// <summary>
/// Gets or sets the dictionary of attribute name and details.
/// </summary>
[JsonProperty(PropertyName = "searchableindexedfieldinfomap")]
public IDictionary<string, FieldStatusInfo> SearchableIndexedFieldInfoMap { get; set; }
}
Classe FieldStatusInfo
Utilisée pour désérialiser les données FieldStatusInfo.
using Newtonsoft.Json;
using System.Diagnostics.CodeAnalysis;
namespace PowerApps.Samples.Search.Types;
[ExcludeFromCodeCoverage]
public sealed class FieldStatusInfo
{
/// <summary>
/// Gets or sets index field name.
/// </summary>
[JsonProperty(PropertyName = "indexfieldname")]
public string IndexFieldName { get; set; }
}
Classe ManyToManyRelationshipSyncStatus
Utilisée pour désérialiser les données ManyToManyRelationshipSyncStatus.
using Newtonsoft.Json;
public sealed class ManyToManyRelationshipSyncStatus
{
/// <summary>
/// Gets the relationship name.
/// </summary>
[JsonProperty("relationshipName")]
public string? RelationshipName { get; }
/// <summary>
/// Gets the relationship metadata id.
/// </summary>
[JsonProperty("relationshipMetadataId")]
public Guid RelationshipMetadataId { get; }
/// <summary>
/// Gets the search entity name.
/// </summary>
[JsonProperty("searchEntity")]
public string? SearchEntity { get; }
/// <summary>
/// Gets the second entity name.
/// </summary>
[JsonProperty("relatedEntity")]
public string? RelatedEntity { get; }
/// <summary>
/// Gets the search entity Id attribute.
/// </summary>
[JsonProperty("searchEntityIdAttribute")]
public string? SearchEntityIdAttribute { get; }
/// <summary>
/// Gets the related entity Id attribute.
/// </summary>
[JsonProperty("relatedEntityIdAttribute")]
public string? RelatedEntityIdAttribute { get; }
/// <summary>
/// Gets the intersect entity name.
/// </summary>
[JsonProperty("intersectEntity")]
public string? IntersectEntity { get; }
/// <summary>
/// Gets the search entity object type code.
/// </summary>
[JsonProperty("searchEntityObjectTypeCode")]
public int SearchEntityObjectTypeCode { get; }
/// <summary>
/// Gets the synced version.
/// </summary>
[JsonProperty("lastSyncedVersion")]
public string? LastSyncedDataVersion { get; }
}
Voir aussi
Rechercher des enregistrements Dataverse
Requête de recherche Dataverse
Suggestion de recherche Dataverse
Recherche par exécution automatique Dataverse
Recherche héritée Dataverse
Notes
Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)
Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).