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

时间:2018-05-04 08:53:16

标签: azure lucene azure-cosmosdb azure-search

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

我们要求允许用户对文档进行排序和过滤,然后搜索并跳转到分页结果集中的特定文档页面。

是否可以通过排序和过滤查询Azure搜索索引,并从结果集中获取特定文档ID的位置/排名?我需要看一个替代选项吗?我相信可以通过SQL后端实现这一目标,但显然这将是一项实施的重大任务。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

此刻尝试一下。我正在使用两步过程:

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