通过


搜索 Dataverse 记录

Dataverse 搜索跨多个表提供快速且全面的搜索结果,在单个列表中按相关性排序。 它还提供功能来支持应用中的建议和自动完成体验。

注释

本文档面向开发人员介绍如何以编程方式与 Dataverse 搜索 API 交互。

有关用户体验以及如何为环境配置 Dataverse 搜索的信息,请参阅以下主题:

如何使用

开发人员可以通过三种不同的方式使用搜索 API:

  • 用于 .NET 的 Dataverse SDK
  • Web API /api/data/v9.x 端点
  • 原生搜索 /api/search/v2.0/ 端点

搜索操作被定义为使用 自定义 API 的 Dataverse 消息。 对于 .NET 项目,请使用适用于 .NET 的 SDK。

目前,SDK 不包括使用这些操作的类。 对于 .NET Framework 项目,像处理任何自定义操作一样,使用 Power Platform CLI pac 模型生成器构建命令来生成这些消息的*Request*Response类。

还可以使用 OrganizationRequestOrganizationResponse 类。

有关详细信息,请参见:

搜索操作

搜索提供三项操作来支持支持用于搜索数据的用户界面。

SDK 消息名称
Web API 操作
Search 2.0 端点
说明
searchquery
searchquery 操作
/api/search/v2.0/query
返回搜索结果页。
请参阅 Dataverse 搜索查询
searchsuggest
搜索建议操作
/api/search/v2.0/suggest
当用户在窗体字段中输入文本时提供建议。
请参阅 Dataverse 搜索建议
searchautocomplete
searchautocomplete 操作
/api/search/v2.0/autocomplete
用户在表单字段中输入文本时,提供自动完成功能。
请参阅 Dataverse 搜索自动完成

两个操作可帮助你了解搜索是否已启用以及搜索的配置方式。

SDK 消息名称
Web API 函数
Search 2.0 端点
说明
searchstatistics
searchstatistics 函数
/api/search/v2.0/statistics
提供组织存储大小和文档数量。
请参阅 Dataverse 搜索统计信息
searchstatus
searchstatus 函数
/api/search/v2.0/status
组织的搜索状态。
请参阅 Dataverse 搜索状态

如果将 Insomnia 与 Dataverse Web API 配合使用,则了解尝试使用 API 是多么有用。 有关设置Insomnia环境以与Dataverse Web API 进行身份验证的说明,请参阅 将 Insomnia 与 Dataverse Web API 一起使用

对于使用 Web API 函数和操作的搜索操作,您可以遵循相同的说明。 如果要使用本机搜索 2.0 终结点,请更改以下两个环境变量:

Variable Web API 值 Search 2.0 端点值
version 9.2 2.0
webapiurl {{url}}/api/data/v{{version}}/ {{url}}/api/search/v{{version}}/

检测是否启用了搜索

默认情况下,Dataverse 搜索为生产环境启用,但它是一项选择退出功能,因此即使在生产环境中也可以将其关闭。 如果使用生产环境以外的环境,管理员必须启用它。 了解如何在管理中心启用搜索

未启用搜索时出错

如果未启用环境时使用查询、建议或自动完成操作,则会收到以下错误:

ErrorCode: -2147185397 消息: Dataverse Search feature is disabled for this organization.

可以通过检查组织表中的设置或使用 Dataverse 搜索状态 操作来检测搜索服务是否已启用。

检查组织表

“组织”表包含一行数据,用于控制组织的配置方式。 布尔列 IsExternalSearchIndexEnabled 指示该组织是否启用了搜索功能。

此函数返回 IsExternalSearchIndexEnabled 组织的属性值。

static bool IsExternalSearchIndexEnabled(IOrganizationService service) {

    QueryExpression query = new QueryExpression("organization") { 
        ColumnSet = new ColumnSet("isexternalsearchindexenabled")
    };

    EntityCollection organizations = service.RetrieveMultiple(query);
    return (bool)organizations.Entities.FirstOrDefault()["isexternalsearchindexenabled"];
}

详细信息: 使用 QueryExpression 生成查询

Dataverse 中的数据控制哪些表和列启用了搜索功能。

启用表

只有在 EntityMetadata.CanEnableSyncToExternalSearchIndex.Value 属性EntityMetadata.ChangeTrackingEnabled 属性 都为 true 的情况下,才可以为 Dataverse 搜索启用这些表。 CanEnableSyncToExternalSearchIndex.CanBeChanged如果值为 false,则无法更改该值。 有关详细信息,请参阅 托管属性

若要为 Dataverse 搜索启用表,请将 EntityMetadata.SyncToExternalSearchIndex 属性 设置为 true

使用具有表逻辑名称的 SDK 或 Web API 检查表的值。 在以下查询中,用您要检查的表的逻辑名称替换account

static void RetrieveSearchSettingsForTable(IOrganizationService service, string logicalName = "account") {

    RetrieveMetadataChangesRequest request = new RetrieveMetadataChangesRequest() { 
            Query = new EntityQueryExpression() { 
                Properties = new MetadataPropertiesExpression(
                    "CanEnableSyncToExternalSearchIndex", 
                    "SyncToExternalSearchIndex")
            }
    };
    request.Query.Criteria.Conditions.Add(
        new MetadataConditionExpression(
            propertyName: "LogicalName", 
            conditionOperator: MetadataConditionOperator.Equals, 
            value: logicalName));

    var response = (RetrieveMetadataChangesResponse)service.Execute(request);

    EntityMetadata table = response.EntityMetadata.FirstOrDefault();

    Console.WriteLine($"CanEnableSyncToExternalSearchIndex: {table.CanEnableSyncToExternalSearchIndex.Value}");
    Console.WriteLine($"SyncToExternalSearchIndex: {table.SyncToExternalSearchIndex}");
}

输出

CanEnableSyncToExternalSearchIndex: True
SyncToExternalSearchIndex: True

有关详细信息,请参见:

有关详细信息,请参见:

启用列

可搜索表的列取决于它们是否包含在每个表的“快速查找”视图中。 可以在 视图(SavedQuery)表中 查询视图的定义,并通过编程方式更新视图。

有关详细信息,请参见:

服务保护限制

Dataverse 搜索强制实施较低限制,因此你不会达到常见的 Dataverse 服务保护 API 限制。 以相同的方式管理这些限制。

Dataverse 搜索允许用户每秒发送一个请求,每个组织限制为每分钟 150 个请求。 如果超出此限制,API 将返回 429 请求过多 错误。 如果 API 返回错误 429 ,请等待响应标头值中 Retry-After 定义的时间段,然后再发送更多请求。 该值表示等待的秒数。

另见

Dataverse 搜索查询
Dataverse 搜索建议
Dataverse 搜索自动完成
Dataverse 搜索统计信息和状态
Dataverse 旧版搜索
为您的环境配置 Dataverse 搜索