gpt4 book ai didi

azure-cognitive-search - 为什么在分页时可能会从 Azure 搜索中获得重复的结果?

转载 作者:行者123 更新时间:2023-12-01 14:02:21 24 4
gpt4 key购买 nike

有时在使用 Azure Search's paging 时结果中可能有重复的文件。下面是一个分页请求的例子:

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

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

最佳答案

如果底层索引发生变化,或者您依赖于按相关性分数排序,则分页查询的结果不能保证稳定。分页只是改变了 $skip 的值对于每个页面,但每个查询都是独立的,并且对数据的当前 View 进行操作(即 – 没有像在通用数据库中那样的快照或其他一致性机制)。

这是一个如何获得重复项的示例。假设有四个文档的索引:

  • { "id": "1", "rating": 5 }
  • { "id": "2", "rating": 3 }
  • { "id": "3", "rating": 2 }
  • { "id": "4", "rating": 1 }

  • 现在假设您要按页面大小按评级排序,翻阅结果。您将执行此查询以获取第一页:
    $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 之前排序并落在第一页上。

    在您依赖文档分数的情况下(您不使用 $orderby 或使用 $orderby=search.score() ),分页可能会返回重复的结果,因为每个查询可能由不同的副本处理,并且该副本可能有不同的术语和文档频率统计——足以改变页面边界处文档的相对顺序。

    由于这些原因,重要的是将 Azure 搜索视为搜索引擎(因为它是),而不是通用数据库。

    关于azure-cognitive-search - 为什么在分页时可能会从 Azure 搜索中获得重复的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428473/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com