为什么在分页时可以从Azure Search获得重复结果?

时间:2017-02-24 00:01:25

标签: azure-search

有时使用Azure Search's paging时,结果中可能会有重复的文档。以下是分页请求的示例:

GET /indexes/myindex/docs?search=*$top=15&$skip=15&$orderby=rating desc

为什么这可能?怎么会发生?分页时是否有任何一致性保证?

1 个答案:

答案 0 :(得分:2)

如果基础索引发生变化,则不保证分页查询的结果是稳定的。分页只是为每个页面更改$skip的值,但每个查询都是独立的,并且在数据的当前视图上运行(即 - 没有像您在通用目的中找到的快照或其他一致性机制数据库)。

以下是您可能会获得重复的示例。假设一个包含四个文档的索引:

  1. { "id": "1", "rating": 5 }
  2. { "id": "2", "rating": 3 }
  3. { "id": "3", "rating": 2 }
  4. { "id": "4", "rating": 1 }
  5. 现在假设您要翻阅页面大小为2的结果,按评分排序。您将执行此查询以获取第一页:

    $top=2&$skip=0&$orderby=rating desc
    

    得到这些结果:

    1. { "id": "1", "rating": 5 }
    2. { "id": "2", "rating": 3 }
    3. 现在您将第五个文档插入索引:

      { "id": "5", "rating": 4 }
      

      此后不久,您执行查询以获取结果的第二页:

      $top=2&$skip=2&$orderby=rating desc
      

      得到这些结果:

      1. { "id": "2", "rating": 3 }
      2. { "id": "3", "rating": 2 }
      3. 请注意,您已经两次获取了文档2。这是因为新文档5具有更高的评级值,因此它在文档2之前排序并落在第一页上。

        这是将Azure搜索视为搜索引擎(因为它是)而非通用数据库的重要原因之一。