簡體   English   中英

在就地執行Elasticsearch Reindex操作時發生服務器錯誤

[英]Server error while performing Elasticsearch Reindex in place operation

我正在使用AWS Elasticsearch Service(版本6.3)。 我對在將數據從current_index重新索引到new_index時更改映射感興趣。 我不是要從舊的Elasticsearch集群升級到新集群。 我的current_indexnew_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_indexcurrent_index相匹配,並且status變為green


如果我從Java發布POST _reindexPOST _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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM