有时使用Azure Search's paging时,结果中可能会有重复的文档。以下是分页请求的示例:
GET /indexes/myindex/docs?search=*$top=15&$skip=15&$orderby=rating desc
为什么这可能?怎么会发生?分页时是否有任何一致性保证?
答案 0 :(得分:2)
如果基础索引发生变化,则不保证分页查询的结果是稳定的。分页只是为每个页面更改$skip
的值,但每个查询都是独立的,并且在数据的当前视图上运行(即 - 没有像您在通用目的中找到的快照或其他一致性机制数据库)。
以下是您可能会获得重复的示例。假设一个包含四个文档的索引:
{ "id": "1", "rating": 5 }
{ "id": "2", "rating": 3 }
{ "id": "3", "rating": 2 }
{ "id": "4", "rating": 1 }
现在假设您要翻阅页面大小为2的结果,按评分排序。您将执行此查询以获取第一页:
$top=2&$skip=0&$orderby=rating desc
得到这些结果:
{ "id": "1", "rating": 5 }
{ "id": "2", "rating": 3 }
现在您将第五个文档插入索引:
{ "id": "5", "rating": 4 }
此后不久,您执行查询以获取结果的第二页:
$top=2&$skip=2&$orderby=rating desc
得到这些结果:
{ "id": "2", "rating": 3 }
{ "id": "3", "rating": 2 }
请注意,您已经两次获取了文档2。这是因为新文档5具有更高的评级值,因此它在文档2之前排序并落在第一页上。
这是将Azure搜索视为搜索引擎(因为它是)而非通用数据库的重要原因之一。