设置Elasticsearch服务器以处理来自微服务的数据

时间:2016-04-14 15:29:55

标签: ruby-on-rails elasticsearch architecture microservices

我对弹性搜索及其缩放非常陌生,我有一个问题,我甚至不知道如何处理。

以下是这种情况:

有几台带有Rails微服务应用程序的服务器。他们每个人都获得了各自相当大的数据(更具体地说,聚合来自不同社交网络的帖子 - 所以可索引搜索字段在所有数据库中都是相同的。)

我需要找到一个解决方案,允许将数据保存在当前位置,并设置专门用于搜索多个数据库的弹性搜索服务器,而不会在相应的Rails应用程序上启用此搜索服务器。这可能意味着在每个其他服务器上设置ES,在那里定义搜索模式,但在完全不同的服务器上进行多模型搜索。

这些操作的最终目标应该是将整个ActiveRecord对象/或所有相关属性发送到主应用程序。

甚至可以实现吗?也许有人遇到过类似的问题?

关于如何开始使用它,我有点迷失。

1 个答案:

答案 0 :(得分:3)

这个问题有点宽泛,但我想我至少可以从理解的方向指出正确的方向。首先,让我先说明我的理解问题。

  

您有多个数据库,每个数据库都由自己的微服务填充。每个数据库都包含您希望能够搜索的类似信息(即作者,正文,标题等)。您希望弹性搜索集群可以访问所有这些数据库中的数据,并且可以返回包含正确数据的结果与搜索匹配的数据库和文档。

在处理像这样的复杂案例时,Elasticsearch非常强大。由于您的所有数据都具有相似的结构和字段,因此您只需使用一个带有附加字段的索引来存储文档来自哪个DB以及来自该DB的文档ID。这样您就可以执行搜索,例如“向我发送威廉·夏特纳在这3个社交网络中发布的所有帖子。”#/ p>

您需要使用其他几项功能才能实现此功能。首先,您需要一种机制,用于将数据库中的数据导入搜索索引。在我的团队中,我们使用一个单独的IndexingService,它知道如何读取事件流并将实时数据发送到ES索引。您只需要决定索引策略(即,您使用新条目更新索引的频率是多少?)。其次,您需要在客户端使用一些逻辑来获取原始搜索结果并从数据库中检索相关条目。

这只是解决问题的一种方法。如果您想要一种方法,允许您为每个社交网络维护不同的索引,但仍然有一个中心位置,您可以搜索它们,我建议使用Elasticsearch Tribe节点。基本上,提交一个知道每个搜索集群的搜索以及如何与它们进行交互以返回统一的搜索结果是一个单一的地方。

学习弹性搜索的最佳方法是让群集启动并运行并开始尝试!祝你好运!