Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 快速将整个MongoDB集合索引到ElasticSearch中_C#_Mongodb_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Indexing - Fatal编程技术网 elasticsearch,indexing,C#,Mongodb,elasticsearch,Indexing" /> elasticsearch,indexing,C#,Mongodb,elasticsearch,Indexing" />

C# 快速将整个MongoDB集合索引到ElasticSearch中

C# 快速将整个MongoDB集合索引到ElasticSearch中,c#,mongodb,elasticsearch,indexing,C#,Mongodb,elasticsearch,Indexing,我在MongoDB中有一个集合,我正在将其索引到Elasticsearch中。我是在一个C#过程中这样做的。该集合有1亿个文档,对于每个文档,我必须查询其他文档,以便将其反规范化为Elasticsearch索引 这一切都需要时间。从MongoDB读取是缓慢的部分(索引相对较快)。我正在尽可能高效地批处理来自MongoDB的数据,但这个过程需要2天以上的时间 只有当Elasticsearch中的映射发生变化时,才会发生这种情况,但在过去一个月内,这种情况已经发生了好几次。 有什么方法可以提高性能吗

我在MongoDB中有一个集合,我正在将其索引到Elasticsearch中。我是在一个C#过程中这样做的。该集合有1亿个文档,对于每个文档,我必须查询其他文档,以便将其反规范化为Elasticsearch索引

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

只有当Elasticsearch中的映射发生变化时,才会发生这种情况,但在过去一个月内,这种情况已经发生了好几次。
有什么方法可以提高性能吗?

当您更改映射时,可能不需要从头开始启动导入(我指的是从MongoDB导入)。请阅读以下内容:

当需要更改映射时,必须:

  • 使用新映射创建新索引
  • 使用elasticsearch的内置功能将旧索引中的数据重新索引为新索引
  • 在此之后,旧文档将在新索引中使用新映射进行索引。与通过HTTP API从MongoDB导入相比,elasticsearch中的内置reindex将更快地工作

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


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

    当您更改映射时,可能不需要从头开始导入(我指的是从MongoDB导入)。请阅读以下内容:

    当需要更改映射时,必须:

  • 使用新映射创建新索引
  • 使用elasticsearch的内置功能将旧索引中的数据重新索引为新索引
  • 在此之后,旧文档将在新索引中使用新映射进行索引。与通过HTTP API从MongoDB导入相比,elasticsearch中的内置reindex将更快地工作

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


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

    您是否已经通过
    \u bulk
    API将这些数据导入Elasticsearch?如果我是对的,您将一些数据从mongo导入Elasticsearch。然后,当您需要更改elasticsearch映射时,您可以删除旧数据并使用更新的映射启动导入到新的elasticsearch索引?@BrunoHenrique它没有使用批量API,但实际上索引并不慢-它是从MongoDB读取的。@froosty这是正确的。如果映射已更改,唯一要做的就是删除索引并重新索引文档。至少这是我的理解。您是否已经通过
    \u bulk
    API将这些数据导入Elasticsearch?如果我是对的,您将一些数据从mongo导入Elasticsearch。然后,当您需要更改elasticsearch映射时,您可以删除旧数据并使用更新的映射启动导入到新的elasticsearch索引?@BrunoHenrique它没有使用批量API,但实际上索引并不慢-它是从MongoDB读取的。@froosty这是正确的。如果映射已更改,唯一要做的就是删除索引并重新索引文档。至少这是我的理解。