Teilen über


Dataverse-Suchstatistiken und -Status

Die Dataverse-Suche bietet zwei Vorgänge, mit denen Sie Daten zu Datenstrukturen, die zur Unterstützung der Suche verwendet werden, abrufen und prüfen können, ob die Suche aktiviert ist.

Statistik

Möglicherweise müssen Sie die Größe der zurückgegebenen Datenstruktur kennen, um Ihre Abfrage oder Abfrageergebnisse besser zu optimieren und die Größe Ihrer Datenbank zu verwalten, um die Kosten im Griff zu behalten.

Suchstatistiken liefern Informationen über:

  • Speichergröße in Bytes
  • Speichergröße in Megabytes
  • Anzahl der Dokumente

Statistikbeispiele

Im folgenden Beispiel wird gezeigt, wie Sie die statistics-API verwenden.

Dieses Beispiel stammt aus dem Beispiel für das SDK für den .NET-Suchvorgang auf 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");
}

Ausgabe

Wenn Sie die OutputSearchStatistics-Methode mit einer authentifizierten Instanz der ServiceClient-Klasse aufrufen:

OutputSearchStatistics(service: serviceClient);

Die Ausgabe sieht ungefähr wie folgt aus:

OutputSearchStatistics START

        StorageSizeInBytes: 1341090
        StorageSizeInMb: 1
        DocumentCount: 1309

OutputSearchStatistics END

Unterstützende Klassen

Die OutputSearchStatistics-Methode hängt von den folgenden unterstützenden Klassen ab, um die Anfrage zu senden und das Ergebnis zu verarbeiten:

searchstatisticsRequest- und searchstatisticsResponse-Klassen

Diese Klassen werden mit dem Power Platform CLI-Befehl pac modelbuilder uild generiert, wie unter Generieren von Klassen mit früher Bindung für das SDK für .NET beschrieben.

SearchStatisticsResult-Klasse

Wird zum Deserialisieren der searchstatisticsResponse.response.value-Eigenschaft verwendet.

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

Verwenden Sie den Suchstatus, um Folgendes zu erfahren:

  • Ob die Suche aktiviert ist.
  • Welche Tabellen und Spalten für die Suche aktiviert sind.

Statusantworttypen

Der Statusvorgang gibt Daten unter Verwendung der folgenden Typen zurück:

searchstatusResponse.response.value

Die searchstatusResponse.response-Eigenschaft hat eine value-Eigenschaft mit den folgenden Eigenschaften:

Name des Dataflows typ Beschreibung
entitystatusresults EntityStatusInfo[] Enthält Informationen zum Status der für die Suche aktivierten Tabellen.
manytomanyrelationshipsyncstatus ManyToManyRelationshipSyncStatus[] Enthält Informationen zum Synchronisierungsstatus von n:n-Beziehungen.
status Status Zeigt den Status einer Tabelle und/oder des Index als Ganzes an.
lockboxstatus LockBoxStatus Zeigt den Status der Lockbox an.
cmkstatus CMKStatus Zeigt den Status des von der Kundschaft verwalteten Schlüssels an.

EntityStatusInfo

Enthält Informationen zum Status der für die Suche aktivierten Tabellen.

Name des Dataflows typ Beschreibung
entitylogicalname Zeichenfolge Der logische Name der Tabelle
objecttypecode Zeichenfolge Der Objekttypcode der Tabelle.
primarynamefield Zeichenfolge Die primäre Spalte der Tabelle.
lastdatasynctimestamp Zeichenfolge Die Zeit der letzten Datensynchronisierung.
lastprincipalobjectaccesssynctimestamp Zeichenfolge Die letzte Synchronisierungszeit für den Zugriff auf das Prinzipalobjekt.
entitystatus Zeichenfolge Der Status der Entitätsebene.
searchableindexedfieldinfomap Dictionary<string,FieldStatusInfo> Das Wörterbuch der indizierten Spaltennamen und -details.

FieldStatusInfo

Details zu den indizierten Feldern einer Tabelle.

Name des Dataflows typ Beschreibung
indexfieldname Zeichenfolge Der Name des Indexfelds.

Status

Zeigt den Status einer Tabelle und/oder des Index als Ganzes an.

Name des Dataflows Wert Beschreibung
notprovisioned 0 Die Organisation ist nicht für die Suche bereitgestellt.
provisioninginprogress 1 Die Organisation wird bereitgestellt
provisioned 2 Die Organisation ist für die Suche bereitgestellt.

CMKStatus

Zeigt den Status des von der Kundschaft verwalteten Schlüssels an.

Weitere Informationen: Verwaltung der Schlüssel

Name des Dataflows Wert Beschreibung
Unknown 0 Die Dataverse-Suche ist nicht bereitgestellt.
Disabled 1 Der vom Kunden verwaltete Schlüssel ist deaktiviert.
Enabled 2 Der vom Kunden verwaltete Schlüssel ist aktiviert.
DisablingInProgress 3 Der vom Kunden verwaltete Schlüssel wird derzeit deaktiviert.
EnablingInProgress 4 Der vom Kunden verwaltete Schlüssel wird derzeit aktiviert.

LockBoxStatus

Zeigt den Status der Lockbox an.

Weitere Informationen: Sicherer Zugriff auf Kundendaten mit Kunden-Lockbox in Power Platform (Vorschauversion)

Name des Dataflows Wert Beschreibung
Unknown 0 Die Dataverse-Suche ist nicht bereitgestellt.
Disabled 1 Die Lockbox ist deaktiviert.
Enabled 2 Die Lockbox ist aktiviert.
DisablingInProgress 3 Die Lockbox wird gerade deaktiviert.
EnablingInProgress 4 Die Lockbox wird gerade aktiviert.

ManyToManyRelationshipSyncStatus

Enthält Informationen zum Synchronisierungsstatus von n:n-Beziehungen.

Name des Dataflows typ Beschreibung
relationshipName Zeichenfolge Der Name der Beziehung.
relationshipMetadataId Eindeutiger Bezeichner Die ID der Beziehung.
searchEntity Zeichenfolge Der Name der Suchtabelle.
relatedEntity Zeichenfolge Der Name der Bezugstabelle.
searchEntityIdAttribute Zeichenfolge Das Name des Primärschlüssels der Suchtabelle.
relatedEntityIdAttribute Zeichenfolge Das Name des Primärschlüssels der Bezugstabelle.
intersectEntity Zeichenfolge Der Name der Intersect-Tabelle, welche die n:n-Beziehung unterstützt.
searchEntityObjectTypeCode Int Der Objekttypcode der Suchtabelle.
lastSyncedVersion Zeichenfolge Die letzte synchronisierte Version.

Statusbeispiele

Die folgenden Beispiele zeigen die Ausgabe der Status-API.

Dieses Beispiel stammt aus dem Beispiel für das SDK für den .NET-Suchvorgang auf 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");
}

Ausgabe

Wenn Sie die OutputSearchStatus-Methode mit einer authentifizierten Instanz der ServiceClient-Klasse aufrufen:

OutputSearchStatus(service: serviceClient);

Die Ausgabe sieht ungefähr wie folgt aus:

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

Unterstützende Klassen

Die OutputSearchStatus-Methode hängt von den folgenden unterstützenden Klassen ab, um die Anfrage zu senden und das Ergebnis zu verarbeiten:

searchstatusRequest- und searchstatusResponse-Klassen

Diese Klassen werden mit dem Power Platform CLI-Befehl pac modelbuilder uild generiert, wie unter Generieren von Klassen mit früher Bindung für das SDK für .NET beschrieben.

SearchStatusResult-Klasse

Wird zum Deserialisieren der searchstatusResponse.response.value-Daten verwendet.

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; }
}
SearchStatus-Enumeration

Wird zum Deserialisieren der Status-Daten verwendet.

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,
}
LockboxStatus-Enumeration

Wird zum Deserialisieren der LockBoxStatus-Daten verwendet.

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,
}
CMKStatus-Enumeration

Wird zum Deserialisieren der CMKStatus-Daten verwendet.

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,
}
EntityStatusInfo-Klasse

Wird zum Deserialisieren der EntityStatusInfo-Daten verwendet.

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; }
}
FieldStatusInfo-Klasse

Wird zum Deserialisieren der FieldStatusInfo-Daten verwendet.

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; }
}
ManyToManyRelationshipSyncStatus-Klasse

Wird zum Deserialisieren der ManyToManyRelationshipSyncStatus-Daten verwendet.

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; }
}

Siehe auch

Nach Dataverse-Datensätzen suchen
Dataverse-Suchabfrage
Dataverse-Suchvorschlag
Dataverse AutoVervollständigen-Suche
Alte Dataverse-Suche

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).