您能否在已排序的 Azure 搜索索引中找到特定文档位置

Can you find a specific documents position in a sorted Azure Search index

我们有几个 Azure 搜索索引,它们使用 25K 文档的 Cosmos DB 集合作为源,每个索引都有大量可用于排序和筛选的文档属性。

我们有一个需求,让用户可以对文档进行排序过滤,然后在分页结果集中搜索并跳转到特定的文档页面。

是否可以通过排序和筛选查询 Azure 搜索索引并从结果集中获取特定文档 ID 的 position/rank?我需要考虑其他选择吗?我相信可以通过 SQL 后端来实现这一点,但显然这将是一项重大的实施工作。

我还没有找到一种方法来执行此操作,除了编写一个查询来分页直到找到所需的文档,这将是一项相对昂贵且在服务器上处理方面可能很慢的任务。

Azure 搜索中没有用于在另一个查询的结果集中进行筛选的机制。您必须翻阅结果,在客户端查找文档 ID。如果您的查询不是非常有选择性并产生很多页的结果,这可能会很慢,因为 $skip 实际上会重新评估所有结果直到您指定的页面。

您可以使用缓存来加快速度。至少有一位 Azure 搜索客户正在使用 Redis 来缓存搜索结果。如果您的查询足够有选择性,您甚至可以将结果缓存在内存中,这样您只需支付一次分页费用。

目前正在尝试这个。我正在使用两步过程:

  1. 生成查询但设置 $count=true$top=0。查询结果应该包含一个名为@odata.count 的字段。
  2. 然后您可以选择一个索引,然后使用 $top=1$skip=<index> 到 return 单个条目。有一个警告:$skip will only accept numbers less than 100000