Google Cloud Search 索引队列

借助 Connector SDK 和 Cloud Search REST API,您可以创建 Cloud Search 索引队列,以用来执行以下任务

  • 维护每个文档的多方面状况(状态、哈希值等),以便用于确保索引与存储库保持同步。

  • 维护在遍历过程中发现的一系列项以将其编入索引。

  • 根据项的状态确定该项在队列中的优先级。

  • 维护其他状态信息(如检查点、更改标记等),以确保高效集成。

状态和优先级

文档在队列中的优先级取决于其 ItemStatus 代码。下面按优先级顺序(从先到后)列出了可能的 ItemStatus 代码:

  • ERROR - 将项编入索引期间发生了异步错误,并且需要重新编入索引。

  • MODIFIED - 已编入索引的项自上次编入索引后在存储库中发生了修改。

  • NEW_ITEM - 未编入索引的项。

  • ACCEPTED - 已编入索引的文档自上次编入索引后在存储库中未发生更改。

如果队列中的两个项具有相同状态,则在队列中停留时间最长的项将被赋予更高优先级。

队列操作 (Connector SDK)

借助 Content Connector SDK,您可以将项推送到队列中,以及从队列中拉取项。

要封装某个项并将其推送到队列中,请使用 pushItems 构建器类。

要从队列中拉取项以进行处理,您无需执行任何特定操作。SDK 会自动使用 Repository 类的 getDoc 方法按优先级顺序从队列中拉取项。

队列操作 (REST API)

通过 REST API,您可以分别使用以下两个方法将项推送到队列中以及从队列中拉取项:

  • 要将项推送到队列中,请使用 Items.push
  • 要轮询队列中的项,请使用 Items.poll

您还可以使用 Items.index 在索引编制期间将项推送到队列中。在索引编制期间推送到队列中的项不需要使用 type,系统会自动为其分配 ACCEPTED 状态。

Items.push

Items.push 方法用于将 ID 添加到队列中。此方法可使用特定 type 值调用,该值决定了推送操作的结果。如需 type 值的列表,请参阅 Items.push 方法中的 item.type 字段。

推送新 ID 会添加一个包含 NEW_ITEM ItemStatus 代码的新条目。

可选载荷始终会作为不透明值进行存储,并通过 Items.poll 返回。

轮询某个项时,系统会预留该项,这意味着另外对 Items.poll 的调用都不会返回该项。要取消预留轮询的条目,请使用 Items.push 并将 type 设置为 NOT_MODIFIEDREPOSITORY_ERRORREQUEUE。如需进一步了解预留条目和未预留条目,请参阅 Items.poll 部分。

采用哈希值的 Items.push

Cloud Search REST API 支持在 Items.index 请求中指定元数据和内容哈希值。您可以在推送请求中指定元数据和/或内容哈希值,而不指定 type。Cloud Search 索引队列会将提供的哈希值与数据源中该项对应的存储值进行比较。如果两者不匹配,则该条目将被标记为 MODIFIED。如果索引中不存在相应项,则状态将为 NEW_ITEM

Items.poll

Items.poll 方法用于从队列中检索具有最高优先级的条目。请求的状态值和返回的状态值分别指示所请求优先级队列的状态和所返回 ID 的状态。

默认情况下,系统可以根据优先级返回任意队列部分中的条目。除非出现以下任一情况,否则返回的每个条目都会被预留,并且另外对 Items.poll 进行的其他调用都不会返回该条目:

  • 预留超时。
  • 使用 Items.index 将该条目再次加入队列。
  • type 值为 NOT_MODIFIEDREPOSITORY_ERRORREQUEUE 的情况下调用 Items.push