gpt4 book ai didi

elasticsearch - 文本搜索微服务架构

转载 作者:行者123 更新时间:2023-12-02 22:16:52 26 4
gpt4 key购买 nike

我正在研究在基于微服务的系统上实现文本搜索。我们将不得不搜索跨多个微服务的数据。

例如。说我们有两个用于管理组织和联系人的服务。我们应该能够在一个搜索操作中通过联系方式搜索组织。

我们首选的搜索解决方案是Elasticsearch。我们已经有一个基于嵌入式对象(和/或父子对象)的工作解决方案,其中在更新父域时,索引有效负载会被包含在缓存中的相关对象数据丰富(我们避免对服务进行调用)为此直接管理 child )。

我想知道是否有更好的解决方案。有微服务模式适用于这种情况吗?

最佳答案

我不建议您特别使用微服务模式,但它非常适合微服务,称为事件源

事件源描述了一种架构模式,其中事件是由不同来源生成的。现在,一个事件将触发0或多个所谓的投影,然后使用事件中包含的数据以所需的形式汇总信息。

这直接适用于您的问题:每当组织服务更改其内部状态(添加/删除/更新组织)时,它都可以触发事件。如果添加了组织,则它将例如将联系人聚合到该组织并存储该聚合。现在的搜索非常简单:在汇总信息中查找组织ID(可以对其进行索引),并获取与此组织关联的联系人。当然,如果将契约(Contract)添加到契约(Contract)服务中,它们的工作原理也相同:它仅触发一 strip 有契约(Contract)创建信息的消息,并且相应的投影现在会更改不同的聚合,可以再次对其进行索引和快速搜索。

您可以对单个事件进行多个预测-这使您能够以多种不同的形式汇总信息-正是您以后查询信息的方式。不要担心重复的数据:事件源是有意进行此折衷的,并且由于这不是您的业务服务所依赖的数据,因此您不需要手动更改它-这样的重复不会对您造成伤害。

如果您按时间顺序存储事件,则它们会发生(我非常建议您这样做!),您可以一次又一次地“重放”这些事件。例如,这在投影仪有故障且必须修复时会有所帮助!

如果您有兴趣,建议您阅读事件源,并寻找某种事件存储:

  • event sourcing
  • event store

  • 我们使用事件来源来汇总系统中一系列不同的搜索,并且每天将数百万条记录汇总到mongodb中。所有的投影都有自己的集合,它们创建自己的索引,直到现在,我们再也不必诉诸于 flex 搜索之类的不同系统/模式!

    让我知道是否有帮助!

    修订

    use the data contained in the event to aggregate information in the form it is needed



    事件应包含汇总更多信息所需的所有信息。例如,如果您有一个组织创建 Activity ,则至少需要提供一些信息,包括组织名称是什么,某种ID,创建日期,上级组织ID等。根据经验,我们发送所有信息我们聚集在获取请求的服务中(不要直接从请求中获取它;-),首先检查它,然后将其写入事件并发送出去),因为我们不知道我们将需要什么 future 。保持谨慎-负载不应太大!

    现在,我们可以对此事件做出多种预测:一种将组织添加到其父级汇总中(以便轻松查找给定组织的所有子级),一种仅将其添加到所有组织的搜索集中,也许第三,汇总给定子组织的所有父组织,因此对父组织的查找既简单又快速。

    我们使用相同的服务处理这些事件,这些事件也处理客户端请求。其背后的动机是,您的投影创建的数据架构与客户端交互的服务读取数据的方式紧密相关。不必一定要这样,它可以分为两个服务-但是您在那里创建了几乎不可见的依赖关系,而独立释放这两个服务变得更具挑战性。但是,如果您不介意其他级别的复杂性,则可以将两者分开。

    我们目前还在考虑编写一种通用服务,用于从事件中收集信息,以进行诸如搜索之类的事情,其中​​可以编写预测脚本。那只会使不可见的依存关系问题不那么明显,而不能解决。

    关于elasticsearch - 文本搜索微服务架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38964840/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com