【问题标题】:How to get all results from azure search?如何从 azure 搜索中获取所有结果?
【发布时间】:2018-03-24 11:53:45
【问题描述】:

目前我正在创建一个应用程序,我需要在其中调用 API 以进行 azure 搜索。调用此 API:

https://<searchServiceName>.search.windows.net/indexes/<index-name>/docs/search?api-version=2016-09-01

还为搜索查询提供所有必需的参数:

(test||test||test||test||test||test||test)+ Contacts+Campaigns+Companies+Targets+Complanits+Claims+Activities+Opportunities+Completed Activities

问题是,表中与此特定搜索相关的共有 1127 行。但我只得到前 50 个具有以下 JSON 对象输出的结果。

"@search.nextPageParameters": {
        "search": "(test||test||test||test||test||test||test)+ Contacts+Campaigns+Companies+Targets+Complanits+Claims+Activities+Opportunities+Completed Activities",
        "skip": 50}

我应该在查询中进行哪些更改才能获得全部 1127 个或更多结果?

【问题讨论】:

    标签: azure logic azure-sql-database azure-cognitive-search


    【解决方案1】:

    这是预期的行为。来自documentation(请参阅有关$top 查询参数的文档):

    $top=#(可选)

    要检索的搜索结果数。 默认为 50。什么时候 通过 POST 调用,这个参数被命名为 top 而不是 $top。 如果你 指定一个大于 1000 的值并且有超过 1000 个 结果,仅返回前 1000 个结果,以及 链接到下一页结果(参见示例中的@odata.nextLink 下面)。

    Azure 搜索使用服务器端分页来防止查询 一次检索太多文档。默认页面大小为 50, 而最大页面大小为 1000。这意味着默认情况下搜索 如果不指定 $top,Documents 最多返回 50 个结果。如果 有 50 多个结果,响应中包含以下信息 检索最多 50 个结果的下一页(请参阅@odata.nextLink 和 以下示例中的@search.nextPageParameters。同样,如果你 为 $top 指定一个大于 1000 的值,并且有超过 1000 个结果,仅返回前 1000 个结果,以及 检索最多 1000 个结果的下一页的信息。

    基于此,您需要做几件事:

    1. $top 参数指定一个值。因为您没有指定任何值,所以会返回默认记录数(即 50)。
    2. 由于单个请求最多只能获取 1000 条记录,并且您提到索引包含超过 1000 条记录,因此您需要发出多个查询来获取分页结果。

    【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2016-07-31
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多