您能否在已排序的 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 来缓存搜索结果。如果您的查询足够有选择性,您甚至可以将结果缓存在内存中,这样您只需支付一次分页费用。
目前正在尝试这个。我正在使用两步过程:
- 生成查询但设置
$count=true
和 $top=0
。查询结果应该包含一个名为@odata.count 的字段。
- 然后您可以选择一个索引,然后使用
$top=1
和 $skip=<index>
到 return 单个条目。有一个警告:$skip will only accept numbers less than 100000
我们有几个 Azure 搜索索引,它们使用 25K 文档的 Cosmos DB 集合作为源,每个索引都有大量可用于排序和筛选的文档属性。
我们有一个需求,让用户可以对文档进行排序过滤,然后在分页结果集中搜索并跳转到特定的文档页面。
是否可以通过排序和筛选查询 Azure 搜索索引并从结果集中获取特定文档 ID 的 position/rank?我需要考虑其他选择吗?我相信可以通过 SQL 后端来实现这一点,但显然这将是一项重大的实施工作。
我还没有找到一种方法来执行此操作,除了编写一个查询来分页直到找到所需的文档,这将是一项相对昂贵且在服务器上处理方面可能很慢的任务。
Azure 搜索中没有用于在另一个查询的结果集中进行筛选的机制。您必须翻阅结果,在客户端查找文档 ID。如果您的查询不是非常有选择性并产生很多页的结果,这可能会很慢,因为 $skip 实际上会重新评估所有结果直到您指定的页面。
您可以使用缓存来加快速度。至少有一位 Azure 搜索客户正在使用 Redis 来缓存搜索结果。如果您的查询足够有选择性,您甚至可以将结果缓存在内存中,这样您只需支付一次分页费用。
目前正在尝试这个。我正在使用两步过程:
- 生成查询但设置
$count=true
和$top=0
。查询结果应该包含一个名为@odata.count 的字段。 - 然后您可以选择一个索引,然后使用
$top=1
和$skip=<index>
到 return 单个条目。有一个警告:$skip will only accept numbers less than 100000