[英]Server error while performing Elasticsearch Reindex in place operation
我正在使用AWS Elasticsearch Service(版本6.3)。 我對在將數據從current_index
重新索引到new_index
時更改映射感興趣。 我不是要從舊的Elasticsearch集群升級到新集群。 我的current_index
和new_index
都在同一個Elasticsearch 6.3集群上。
我正在嘗試通過遵循Elastic文檔中的信息來執行就地重建索引
我的索引包含約25萬個可搜索文檔。 當我使用curl發布POST _reindex
請求時,
curl -X POST "aws_elasticsearch_endpoint/_reindex" -H 'Content-Type: application/json' -d'
{
"source": {
"index": "current_index"
},
"dest": {
"index": "new_index"
}
}
'
Elasticsearch啟動了重新索引過程(我通過執行GET /_cat/indices?v
驗證了這一點),最終導致curl: (56) Unexpected EOF
錯誤。 Reindex操作實際上可以正常工作。 大約2小時后, doc.count
中的new_index
與current_index
相匹配,並且status
變為green
如果我從Java發布POST _reindex
, POST _reindex
此錯誤:
java.net.SocketException: Unexpected end of file from server
只有當索引中的文檔大小較小(我嘗試使用類似1k可搜索的文檔)時,Reindex API才會成功返回此處指定的位置
AWS Elasticsearch ELB(彈性負載平衡器)的超時時間為60秒。 此功能目前無法配置,是一項長期存在的功能要求
您可以在此aws論壇主題中找到更多詳細信息
結果,任何操作以及在此特定情況下重新索引花費的時間超過60秒將導致網關超時。
結果,不可能通過增加客戶端超時來阻止長時間運行的重新索引。
對於reindex API,解決方法如上述@Val所建議。 那就是使用wait_for_completion=false
標志和Reindex API文檔鏈接中提到的步驟: https : //www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html#_url_parameters_3
這是因為響應需要很長時間才能返回,並且卷曲超時。 在小型數據集上,響應會在超時之前返回,因此您為什么要獲得響應。
但是,當curl超時時,重新索引仍在進行中,您仍然可以使用以下命令查看重新索引的執行情況:
GET _tasks?actions=*reindex&detailed=true
您還可以做的是在curl命令中添加...?wait_for_completion=false
。 ES將為您的重新索引操作創建一個后台任務。 curl命令將提前終止並返回taskId
,您可以使用taskId
使用Task API定期檢查重新索引的狀態
GET .tasks/task/<taskId>
還要注意,在這種情況下,完成任務后,您還需要從.tasks
索引中刪除任務,ES不會為您完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.