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é).