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 分かかります。 個人データは収集されません (プライバシー ステートメント)。