如何可靠地确定Azure认知搜索索引何时是最新的?

时间:2020-06-23 06:46:12

标签: azure azure-cognitive-search

Azure认知搜索最终是一致的-成功写入服务返回,但是在短时间内在搜索索引中未实现这些写入。

我们在最终一致的基于事件的CQRS体系结构中使用Azure认知搜索,其中Azure搜索索引用作事件流的投影。当投影更新后,我们使用websocket通知连接的客户端,以便他们可以重新查询以获取最新数据。

这给Azure搜索带来了挑战,因为当我们通知客户端索引已更新时,客户端可能会在索引提供最新数据之前对其进行查询。

Azure认知搜索是否提供任何内置功能来确定何时可以查询给定的写入? 如果没有,什么模式可以用来实现我们想要的?

1 个答案:

答案 0 :(得分:0)

我不知道Azure搜索中的任何功能,该功能允许您通过回调来提交内容,以确认内容已被索引。但是,在使用此选项之前,我已经使用过搜索引擎。提交内容时,您可以在不同的等待选项之间进行选择:

  • 失火忘却(最快,立即返回)
  • 等待确认存储(合理快速)
  • 确认已建立索引(可能会非常慢,具体取决于整体索引负载)

似乎您想要最后一个选择。您可以创建一个函数,该函数提交一批内容,然后查询直到该内容可用。为此,您需要在每个记录上都有一个指示器,您可以使用该指示器通过查询来确认新记录实际上已被索引。我总是在所有记录中都包含一个timestamp属性,在这种情况下,它将可以完成工作。

用例:您有一个包含500个项目的索引。然后,您有一批10个更新的项目,其中5个是更新,5个是新记录。您向所有这些记录添加时间戳,提交10批,然后循环查询。一旦查询确认您有10条或10条以上记录的时间戳大于或等于您提交批处理的时间,便知道索引已更新。