Dataverse 検索の統計と状態
Dataverse 検索には、検索のサポートに使用されるデータ構造に関するデータの取得と、検索が有効かどうかの確認に使用できる 2 つの操作が用意されています。
統計
クエリまたはクエリ結果をより適切に最適化したり、データベースのサイズを管理してコストを管理したりするには、返されるデータ構造のサイズを知る必要がある場合があります。
Search Statistics では、次の情報が提供されます。
- 記憶域サイズ (バイト)
- 記憶域サイズ (メガバイト)
- ドキュメントの数
統計サンプル
次の例は、statistics
API の使用方法を示しています。
これは、GitHub の SDK for .NET 検索操作のサンプルからの例です。
/// <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");
}
出力
ServiceClient クラスの認証されたインスタンスで OutputSearchStatistics
メソッドを呼び出す場合。
OutputSearchStatistics(service: serviceClient);
出力は次のようになります。
OutputSearchStatistics START
StorageSizeInBytes: 1341090
StorageSizeInMb: 1
DocumentCount: 1309
OutputSearchStatistics END
サポートするクラス
OutputSearchStatistics
メソッドは、次のサポートするクラスに基づいて要求を送信し、結果を処理します。
searchstatisticsRequest クラスおよび searchstatisticsResponse クラス
これらのクラスは、.NET 用 SDK の事前バインド クラスを生成するで説明されているように、Power Platform CLI pac modelbuilder build コマンドを使用して生成されます。
SearchStatisticsResult クラス
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
検索状態を使用して次のことを確認します。
- 検索が有効かどうか。
- 検索が有効になっているテーブルと列。
応答の種類の状態
状態の操作は、次のタイプを使用してデータを返します。
searchstatusResponse.response.value
searchstatusResponse.response
プロパティには、次のプロパティを持つ value
プロパティがあります。
件名 | タイプ | Description |
---|---|---|
entitystatusresults |
EntityStatusInfo[] | 検索が有効になっているテーブルのステータスに関する情報が含まれます。 |
manytomanyrelationshipsyncstatus |
ManyToManyRelationshipSyncStatus[] | 多対多リレーションシップの同期の状態に関する情報が含まれます。 |
status |
Status | テーブルやインデックス全体のステータスを示します。 |
lockboxstatus |
LockBoxStatus | ロックボックスの要求の状態を示します。 |
cmkstatus |
CMKStatus | カスタマー マネージド キーのステータスを示します。 |
EntityStatusInfo
検索が有効になっているテーブルのステータスに関する情報が含まれます。
件名 | タイプ | Description |
---|---|---|
entitylogicalname |
string | テーブルの論理名 |
objecttypecode |
string | テーブルのオブジェクト種類コードです。 |
primarynamefield |
string | テーブルのプライマリ列です。 |
lastdatasynctimestamp |
string | 最終データ同期時刻。 |
lastprincipalobjectaccesssynctimestamp |
string | 最後にプリンシパル オブジェクトにアクセスした同期時刻。 |
entitystatus |
string | エンティティ レベルの状態。 |
searchableindexedfieldinfomap |
Dictionary<string,FieldStatusInfo> | インデックス付きの列名と詳細の辞書。 |
FieldStatusInfo
テーブルのインデックス付きフィールドの詳細。
件名 | タイプ | Description |
---|---|---|
indexfieldname |
string | インデックス フィールド名。 |
Status
テーブルやインデックス全体のステータスを示します。
件名 | 価値 | Description |
---|---|---|
notprovisioned |
0 | 組織は検索用にプロビジョニングされていません。 |
provisioninginprogress |
1 | 組織のプロビジョニングが進行中 |
provisioned |
2 | 検索用にプロビジョニングされた組織。 |
CMKStatus
カスタマー マネージド キーのステータスを示します。
詳細: 暗号化キーの管理
件名 | 価値 | Description |
---|---|---|
Unknown |
0 | Dataverse 検索はプロビジョニングされていません。 |
Disabled |
1 | カスタマー マネージド キーが無効になっています。 |
Enabled |
2 | カスタマー マネージド キーが有効になっています。 |
DisablingInProgress |
3 | カスタマー マネージド キーは無効化中です。 |
EnablingInProgress |
4 | カスタマー マネージド キーは有効化中です。 |
LockBoxStatus
ロックボックスの要求の状態を示します。
詳細: Power Platform でカスタマー ロックボックスを使用して顧客データに安全にアクセスする (プレビュー)
件名 | 価値 | Description |
---|---|---|
Unknown |
0 | Dataverse 検索はプロビジョニングされていません。 |
Disabled |
1 | ロックボックスは無効です。 |
Enabled |
2 | ロックボックスは有効です。 |
DisablingInProgress |
3 | ロックボックスは無効化中です。 |
EnablingInProgress |
4 | ロックボックスは有効化中です。 |
ManyToManyRelationshipSyncStatus
多対多リレーションシップの同期の状態に関する情報が含まれます。
件名 | タイプ | Description |
---|---|---|
relationshipName |
string | 関連付けの名前。 |
relationshipMetadataId |
一意識別子 | リレーションシップの ID。 |
searchEntity |
string | 検索テーブル名。 |
relatedEntity |
string | 関連するテーブル名です。 |
searchEntityIdAttribute |
string | 検索テーブルのプライマリ キーの名前。 |
relatedEntityIdAttribute |
string | 関連テーブルのプライマリ キーの名前。 |
intersectEntity |
string | この多対多の関係をサポートする交差テーブルの名前。 |
searchEntityObjectTypeCode |
int | 検索テーブルのオブジェクト種類コードです。 |
lastSyncedVersion |
string | 最後に同期されたバージョン。 |
状態の例
次のサンプルは、ステータス API の出力を示しています。
これは、GitHub の SDK for .NET 検索操作のサンプルからの例です。
/// <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");
}
出力
ServiceClient クラスの認証されたインスタンスで OutputSearchStatus
メソッドを呼び出す場合。
OutputSearchStatus(service: serviceClient);
出力は次のようになります。
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
サポートするクラス
OutputSearchStatus
メソッドは、次のサポートするクラスに基づいて要求を送信し、結果を処理します。
searchstatisticsRequest クラスおよび searchstatisticsResponse クラス
これらのクラスは、.NET 用 SDK の事前バインド クラスを生成するで説明されているように、Power Platform CLI pac modelbuilder build コマンドを使用して生成されます。
SearchStatusResult クラス
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; }
}
SearchStatus 列挙型
状態データを逆シリアル化するために使われます。
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 列挙型
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,
}
CMKStatus 列挙型
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,
}
EntityStatusInfo クラス
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; }
}
FieldStatusInfo クラス
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; }
}
ManyToManyRelationshipSyncStatus クラス
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; }
}
参照
Dataverse のレコードを検索する
Dataverse の検索クエリ
Dataverse の検索の提案
Dataverse の検索のオートコンプリート
Dataverse のレガシ検索
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。