有没有一种方法可以找出一天中更新/写入solr索引的文档



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

现在,我们需要提供一种事件驱动机制,以便客户端在服务器端出现问题时得到通知。

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

因此,为了在某种程度上实现这一需求,我们公开了一个RESTFul服务,它返回特定索引中的所有文档,客户端应用程序不断地访问这个可靠的服务,以便在一定数量的迭代中获得完整的数据集。

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

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

有没有一种方法可以使用solr/lucene本身实现这一点?solr是否维护可以暴露的soem类型的审计跟踪?

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

有什么建议/意见吗?

有几种方法可以处理此问题。Lucene在IndexDeletionPolicy(请参阅IndexCommits)中公开有关提交的信息,Solr使用该策略来为自己的复制供电。您可能会自己挂接到复制中,并检索索引的当前版本以及在此期间哪些文件发生了更改(请参阅复制的HTTP API)。

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

希望这能给你指明正确的方向!

最新更新