【问题标题】:Azure Search Index - Find the list of itemsAzure 搜索索引 - 查找项目列表
【发布时间】:2019-03-29 06:21:28
【问题描述】:

我们正在使用搜索索引来运行我们的 API 之一。使用从数据库中提取数据的 Azure 函数填充索引的数据。我们可以看到数据库和搜索服务中的记录数是不同的。有什么方法可以获取 Search Service 中的 Key 列表,以便我们与数据库进行比较,看看哪些键缺失?

问候,

约翰

【问题讨论】:

  • 不确定我是否理解这个问题,但您不能简单地使用“*”作为搜索条件搜索所有项目并仅返回关键字段作为搜索结果吗?
  • 但这一次只能提供 1000 个项目,并且必须循环浏览页面仪式?我的索引中有大约 50 万个项目

标签: c# azure azure-cognitive-search azure-search-.net-sdk


【解决方案1】:

Azure 搜索查询 API 专为搜索/筛选方案而设计,它不提供遍历所有文档的有效方法。

也就是说,您可以通过按顺序扫描键来合理地做到这一点:如果您的索引中有一个字段(键字段或另一个字段)既可过滤又可排序,您可以使用 $select 仅提取键对于每个文档,一次 1000 个,按该字段排序。检索到前 1000 个后,不要执行 $skip(这会将您限制为 100,000),而是使用对字段使用大于的过滤器,使用您在上一个响应中看到的最大值。这将使您能够以合理的性能遍历整个集合,尽管一次执行 1000 个需要时间。

【讨论】:

    【解决方案2】:

    您可以尝试搜索“*”。并通过以下示例使用 orderby 和 filter 获取所有数据。 我使用数据 metadata_storage_last_modified 作为过滤器。

        offset           skip              time
         0         --%-->  0
         100,000   --%-->  100,000      getLastTime
         101,000   --%-->  0            useLastTime
         200,000   --%-->   99,000      useLastTime
         201,000   --%-->  100,000      useLastTime & getLastTime
         202,000   --%-->  0            useLastTime
    

    因为Skip限制是100k,所以我们可以计算skip

    AzureSearchSkipLimit = 100k
    AzureSearchTopLimit = 1k
    skip = offset % (AzureSearchSkipLimit + AzureSearchTopLimit)
    

    如果总搜索计数大于 AzureSearchSkipLimit,则应用

    orderby = "metadata_storage_last_modified desc"
    

    当跳过到达 AzureSearchSkipLimit 时,从数据末尾获取 metadata_storage_last_modified 时间。并将 metadata_storage_last_modified 作为下一个 100k 搜索过滤器。

    filter = metadata_storage_last_modified lt ${metadata_storage_last_modified}
    

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 2016-01-25
      • 1970-01-01
      • 2014-10-13
      • 2023-02-11
      • 1970-01-01
      • 2013-01-07
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多