2017-08-25 71 views
1

我在MongoDB中有一个集合,我将其索引到Elasticsearch中。我在C#过程中这样做。该集合拥有1亿个文档,并且对于每个文档,我必须查询其他文档才能对Elasticsearch索引进行非规范化处理。将整个MongoDB集合快速索引到Elastcticsearch中

这都需要时间。从MongoDB读取是一个缓慢的部分(索引相对较快)。我尽可能高效地从MongoDB批量处理数据,但是这个过程需要2天以上。

这只有在Elasticsearch中的映射发生变化时才会发生,但在上个月发生过几次。 有没有什么方法可以提高这方面的性能?

+0

您是否已经通过'_bulk' API将此数据导入Elasticsearch? –

+0

我是对的,你从mongo导入一些数据给elasticsearch。那么,当您需要更改elasticsearch映射时,您将删除旧数据并使用更新的映射启动导入到新的elasticsearch索引? – froosty

+0

@BrunoHenrique它没有使用批量API,但它实际上并不是很慢的索引 - 它是从MongoDB读取的。 –

回答

0

也许你不需要从头开始导入(我的意思是从MongoDB导入),当你改变映射。当你需要改变映射必须Elasticsearch Reindex API

:阅读本

  1. 使用新的映射创建新的索引
  2. 从旧索引重新索引数据到一个新的指数内置elasticsearch的功能。

之后这个旧文档将被索引在新索引内的新映射。 elasticsearch中的内置reindex将比通过HTTP API从MongoDB导入更快。

如果您要使用reindex,请不要忘记使用参数wait_for_completion(此参数在文档中描述)。这将在后台运行reindex。

这种方法能解决你的问题吗?