You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制MS Search API仅返回前X条搜索结果?

如何限制Microsoft Graph Search API的返回结果数量

问题背景

需要限制Microsoft Graph Search API返回的DriveItem类型搜索结果数量,当前C#实现代码如下:

public async Task<string> Search()
{
    var ApplicationClientID = Environment.GetEnvironmentVariable("CLIENT_ID");
    var ApplicationClientSecret = Environment.GetEnvironmentVariable("CLIENT_SECRET");
    var AzureTenantID = Environment.GetEnvironmentVariable("TENANT_ID");
    string[] scopes = new[] { "https://graph.microsoft.com/.default" };

    var options = new ClientSecretCredentialOptions
    {
        AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
    };

    try
    {
        var clientSecretCredential = new ClientSecretCredential(
            AzureTenantID, ApplicationClientID, ApplicationClientSecret, options);
        var graphClient = new GraphServiceClient(clientSecretCredential, scopes, "https://graph.microsoft.com/v1.0");
        Console.WriteLine($"searchQuery :{searchQuery}");
        var requestBody = new Microsoft.Graph.Search.Query.QueryPostRequestBody
        {
            Requests = new List<SearchRequest>
                {
                    new SearchRequest
                    {
                        EntityTypes = new List<EntityType?>
                        {
                            EntityType.DriveItem,
                        },
                        Query = new SearchQuery
                        {
                            QueryString = this.searchQuery,
                        },
                        Fields = new List<string>
                        {
                            "driveId",
                            "listItemId",
                            "author",
                            "title",
                            "url",
                            "rank"
                        },
                        QueryAlterationOptions = new SearchAlterationOptions
                        {
                            EnableSuggestion = true,
                            EnableModification = true,
                        }
                        , Region ="US"
                    },
                },
        };

        var searchResults = await graphClient.Search.Query.PostAsync(requestBody).ConfigureAwait(false);
        var jsonResults = ExtractDriveItemDetails(searchResults);
        return jsonResults;
    }
    catch (Exception ex)
    {
        log.LogError(ex.Message);
        return null;
    }
}

环境配置

使用MS Graph v1.0,项目引用如下:

<PackageReference Include="AutoMapper" Version="12.0.1" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="Azure.Identity" Version="1.9.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
<PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.6.0" />
<PackageReference Include="Microsoft.Graph" Version="5.18.0" />
<PackageReference Include="Microsoft.Graph.Core" Version="3.0.9" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.54.1" />  

已尝试操作

尝试在SearchQuery中设置Top或Count属性,均未生效:

Query = new SearchQuery
{
     QueryString = this.searchQuery,
     Top = 4
},
Query = new SearchQuery
{
     QueryString = this.searchQuery,
     Count = 4
},

同时了解到EnableTopResults选项仅适用于消息类型的查询。


解决方案

正确的做法是在**SearchRequest对象**中设置Top属性,而非SearchQuery。SearchRequest的Top属性用于指定当前搜索请求返回的最大结果数,取值范围为1到1000。

修改后的SearchRequest代码如下:

new SearchRequest
{
    EntityTypes = new List<EntityType?>
    {
        EntityType.DriveItem,
    },
    Query = new SearchQuery
    {
        QueryString = this.searchQuery,
    },
    // 添加Top属性限制结果数量
    Top = 4,
    Fields = new List<string>
    {
        "driveId",
        "listItemId",
        "author",
        "title",
        "url",
        "rank"
    },
    QueryAlterationOptions = new SearchAlterationOptions
    {
        EnableSuggestion = true,
        EnableModification = true,
    },
    Region ="US"
}

说明

  • SearchQuery中的Top参数并非用于控制返回结果总数,而是用于特定查询场景的内部分页,不适用于DriveItem类型的搜索结果限制。
  • 通过SearchRequest.Top设置的数值将直接限制当前请求返回的最大结果条目数,符合需求。

内容的提问来源于stack exchange,提问作者dot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:33:26