3

我们有一个产品作为我们组织内各个产品团队的参考数据来源。数据已存储在 solr 索引中,我们公开了服务以向客户提供对这些数据的访问。

现在我们需要提供一种事件驱动的机制,以便客户端在服务器端发生某些事情时得到通知。

尽管我知道使用 Oracle coherence 等产品很容易实现这一点,但 solr 并不是适合此目的的正确产品。但现在我们不可能倒退并改变解决方案。

因此,为了达到这个要求,在某种程度上,我们公开了一个 RESTFul 服务,它返回特定索引中的所有文档,客户端应用程序继续访问这个 resful 服务,以便在一定数量的迭代中获取完整的数据集。

我知道这不是最好的方法,但我们可用的选项有限,因为我们不希望为此使用另一个数据存储。

作为对这种方法的改进,我们希望我们公开另一个服务,该服务将在特定时间范围内完成的插入/更新/删除返回到 solr 索引。/companyIndex/itr/15 之类的东西,它在过去 15 分钟内对公司指数进行了修改。这将帮助客户减少他们将要处理的数据量。一旦客户端从索引中获取完整的数据集,他们就可以稍后使用增量更新,这样客户端数据集将与主数据集同步。仍然会有一些滞后,但这很好。

有没有办法使用 solr/lucene 本身来实现这一点?solr 是否维护一些可以公开的审计跟踪?

虽然我们可以通过数据加载层保留这些信息,但我们想知道是否可以使用 solr 可用的东西?

有什么建议/意见吗?

4

1 回答 1

1

有几种方法可以处理这个问题。Lucene 在IndexDeletionPolicy(请参阅IndexCommits )中公开有关提交的信息,Solr 使用它来支持自己的复制。您可能可以自己挂钩复制并检索当前版本的索引以及同时哪些文件发生了更改(请参阅用于复制的 HTTP API)。

如果您想了解有关每个提交事件的更多详细信息,则必须深入挖掘,但我相信您可以直接挂接到 Lucene 以自己观察事件(与 Solr 的复制处理程序一样)和然后通过 RabbitMQ 或其他一些消息队列广播它们,以将信息公开给多个客户端。

希望这会为您指明正确的方向!

于 2012-01-30T11:38:19.190 回答