您对 number_found_accuracy 的理解是正确的。我认为您观察到的行为是复制查询故障转移与指定 number_found_accuracy 的查询如何影响使用延续令牌的未来查询之间令人惊讶的相互作用。
当您使用 Search API 索引文档时,我们使用与 High Replication Datastore(即Megastore )相同的机制将它们存储在几个不同的副本中。这些文档在每个副本上生效的速度取决于许多因素。它通常是立即的,但如果您对单个 (index, namespace) 对进行批量写入,延迟可能会变得更长。
可以在这些副本中的任何一个上执行搜索。我们甚至可能会在与原始搜索不同的副本上运行使用延续令牌的搜索。如果原始副本和/或延续副本正在赶上他们的索引工作,他们可能有不同的活动文档集。它会“最终”变得一致,但并不总是立竿见影。
如果您在查询中指定 number_found_accuracy,我们必须运行大部分查询,就好像我们要返回 number_found_accuracy 结果一样。我们特别需要进一步阅读发布列表以查找和计算匹配的文档。读取发布列表会导致其关联的文件块被插入到各种缓存中。
反过来,当您使用光标进行搜索时,我们将能够在我们用于原始搜索的同一副本上更快地阅读文档。因此,您不太可能将继续搜索故障转移到可能尚未完成对同一组文档的索引的不同副本。我认为您观察到的不一致结果是这种延续查询故障转移的结果。
总之,将 number_found_accuracy 设置为较大的值可以有效地预热该副本的缓存。因此,它几乎肯定会是继续搜索的最快副本。面对试图赶上索引的副本,这会让人觉得 number_found_accuracy 对结果的一致性有直接影响,但实际上它只是一个副作用。