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 | typ | Eigenschaft |
---|---|---|
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 | typ | Eigenschaft |
---|---|---|
entitylogicalname |
string | Der logische Name der Tabelle |
objecttypecode |
string | 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 |
string | 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 | typ | Eigenschaft |
---|---|---|
indexfieldname |
string | Der Name des Indexfelds. |
Status
Zeigt den Status einer Tabelle und/oder des Index als Ganzes an.
Name | Wert | Eigenschaft |
---|---|---|
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 | Wert | Eigenschaft |
---|---|---|
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 | 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 | typ | Eigenschaft |
---|---|---|
relationshipName |
string | 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