簡體   English   中英

如何重新索引 AWS Elasticsearch?

[英]How to reindex AWS Elasticsearch?

我的 Ruby/Sinatra 應用程序使用elasticsearch-ruby gem連接到 AWS ES 集群,以索引授權(通過使用其用戶 ID 進行索引)用戶可以搜索的文本文檔。 現在,我想將文檔從一個索引復制到另一個索引,以使不同的授權用戶可以查詢文檔。 我嘗試了此文件中記錄的 _reindex 端點,但出現以下錯誤:

Elasticsearch::Transport::Transport::Errors::Unauthorized - [401] {"Message":"您的請求:'/_reindex' 不被允許。"}:

谷歌搜索,我偶然發現了一個亞馬遜文檔頁面,其中列出了他們 API 上所有支持的操作,但出於某種扭曲的原因,_reindex 還沒有出現。 為什么? 更重要的是,我如何有效地解決這個問題並實現我想做的事情?

您應該仔細檢查 AWS ES 部署的 Elasticsearch 版本。 我相信_reindex API 在2.2 版中可用。 您可以通過使用 curl 例如 GETting ES root ip & port 並檢查 version.number 來檢查版本號。

要解決沒有_reindex端點的問題,我建議您自己實現它。 這還不算太糟。 您可以使用滾動來遍歷要重新索引的所有文檔。 如果是整個索引,則可以使用帶有滾動的 matchall 查詢。 然后,您可以根據需要操作文檔,或者簡單地使用批量 api將文檔發布(即重新索引)到新索引。

確保提前使用您想要的映射模板創建了新索引。

上面的這個過程最適合重新索引大量文檔; 如果您只想移動幾個或一個(聽起來像您這樣做)。 通過 id 從其現有索引中獲取文檔並將其提交到您的第二個索引。

AWS Elasticsearch 現在支持遠程重新索引,請查看此文檔: https : //docs.aws.amazon.com/elasticsearch-service/latest/developerguide/remote-reindex.html

下面的例子:'''

POST <local-domain-endpoint>/_reindex
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443"
    },
    "index": "remote_index"
  },
  "dest": {
    "index": "local_index"
  }
}

'''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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