更改 NodeJs 中的流以进行 elasticsearch

问题描述

目的是在 elasticsearch 上同步某些集合中的字段。随着 mongodb 的每一次变化,这也应该在 elasticsearch 上实现。我见过不同的包裹。例如河。不幸的是,它对我不起作用,所以我尝试没有它。这是变更流的正确方法吗?

你怎么能更漂亮地解决这个问题?数据必须与 Elasticsearch 上的每次更改(插入、更新、删除)同步。对于多个集合,但每个集合都不同(每个集合仅某些字段)。不幸的是,我没有解决这个问题的经验,如果添加删除集合或字段,则不会花费太多精力

    const res = await client.connect();
    const changeStream = res.watch();
  
    changeStream.on('change',(data) => {
     // check the change (is the chance in the right database / collection)
     // parse 
     // push it to elastic server
    });

我希望你能帮助我,在此先感谢:)

解决方法

是的。它会起作用,但您必须处理以下情况

  1. 当您的节点 js 进程停止而 mongodb 更新正在进行时。

    您可以使用恢复令牌并跟踪该令牌,因此一旦您 进程出现它可以从那里恢复。

  2. 在每次更改时插入单个文档。

    这对于elasticsearch来说会不堪重负,并且可能会导致插入缓慢,这 最终会导致 mongo 和 elastic 之间的同步延迟。所以最好收集 更改流中的多个文档并使用批量 API 操作插入。