2016-04-14 116 views
5

处理数据我很新的elasticsearch及其缩放和我有一个问题,我甚至不知道如何处理。建立Elasticsearch服务器从微服务

这是的情况:

有几个服务器与Rails微服务应用程序。他们每个人都获得自己非常大的一块数据(更具体地说,汇总来自不同社交网络的帖子 - 因此所有数据库中的可索引搜索字段都是相同的)。

我需要找到一个解决方案,将允许保留数据,其中它目前并设立专门通过多个数据库,而相应的Rails搜索的elasticsearch服务器应用程式把这个搜索服务器上。这可能意味着在每个其他服务器上设置ES,在那里定义搜索模式,但是在完全不同的服务器上进行多模型搜索。

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

它甚至有可能实现?也许任何人都有类似的问题?

我有点迷失如何得到它开始。

回答

3

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

你有多个数据库由他们自己的微服务分别填充。每个数据库都包含您希望能够搜索的类似信息(例如,作者,主体,标题等)您想要一个可以访问所有这些数据库中的数据的elasticsearch集群,并且可以返回包含正确结果的结果数据库和与搜索匹配的文档。

Elasticsearch在处理这样的复杂情况时非常强大。由于您的所有数据都具有相似的结构和字段,因此您可以使用一个带有附加字段的索引来存储文档来自哪个数据库以及该数据库的文档ID。这将允许您执行搜索,例如“给我由威廉沙特纳在这3个社交网络上发布的每一篇文章”。

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

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

学习elasticsearch最好的办法是只得到一个集群和运行,开始试验!祝你好运!

+0

谢谢@ chris-franklin,这正是问题所在。索引服务是否提到了一个单独的应用程序,它索引所有外部数据库,然后执行搜索? – marinados

+0

我自己我正在考虑创建一个指向多个远程数据库的搜索应用程序,将它们全部索引,执行多模型搜索并通过API返回所有内容。这是一个糟糕的策略吗?我会研究部落节点,看起来很有希望! – marinados

+0

我们的索引服务是我们架构中的另一个微服务。它处理将数据推送到Elasticsearch。我们有一个单独的微服务,它处理构建搜索查询,将它们提交给ES,然后以我们的UI可以轻松使用的格式返回结果。您的需求将直接影响此架构需要的复杂程度。我们的需求意味着我们需要单独的可扩展服务来处理每一步。 –