ElasticSearch重新索引:等待完成

ifmq2ha2  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(374)

我正在尝试使用nest c#重新索引2695140个文档。我需要计算一下重新索引所有文档所花的时间,我已经为这些文档编写了日志。但是在运行1分钟之后,我的代码返回了一个无效的响应(失败),但是由于我们触发了ElasticSearch的reindex endoint,文档被正确地索引了。
我希望我的代码应该等到重新索引操作完成,这样我就可以计算重新索引所花费的总时间。下面是我正在使用的代码

return await Client.ReindexOnServerAsync(selector => selector
                                .Source(src => src
                                  .Index(_config.SomeIndex))
                               .Destination(dest => dest
                                  .Index(newIndexName).OpType(OpType.Index))
                               .WaitForCompletion(true));

提前谢谢。

ubbxdtey

ubbxdtey1#

我想我的代码应该等到重新索引操作完成
我不知道您使用的是哪种编程语言,但对于遵循“每个请求一个线程”模型的语言,等待重新索引操作是不明智的。操作所花费的时间将与要重新索引的文档数成比例,并且它将阻塞线程(消耗资源),直到操作完成。
相反,您应该:
在不等待完成的情况下重新编制索引,例如:

POST _reindex?wait_for_completion=false
   {
    "source":{
        "index":"book"
    },
    "dest":{
        "index":"book_new1"
    }
}

响应:将具有任务id
使用tasks api跟踪任务的完成情况。它还将包含请求是否成功的状态以及操作所花费的时间。任务api的响应示例如下所示:

{
  "completed" : true,
  "task" : {
    "node" : "jF8smI1eR1mwwNxl8_7z2A",
    "id" : 2427911
    },
    "description" : "reindex from [book] to [book_new1][_doc]",
    "start_time_in_millis" : 1600335207787,
    "running_time_in_nanos" : 640430472,
    "cancellable" : true,
    "headers" : { }
  },
  "response" : {
    "took" : 634,  // <====== Time taken by operation
    "timed_out" : false,
    "total" : 3,
    "updated" : 0,
    "created" : 3,
    "deleted" : 0,
    "batches" : 1,
    "version_conflicts" : 0,
    "noops" : 0
  }
}

您可以定期检查(使用cron/scheduler/etc)直到完成并采取所需的操作。

相关问题