ElasticSearch:reindex和aliases(保持路由策略)

时间:2017-05-17 14:57:41

标签: elasticsearch

我正在为每个用户使用别名。对于每个别名,我正在关联routingfilter

PUT _/<index>/_alias/u1@u1.com'
{
  "routing": "u1@u1.com",
  "filter": {
    "term": {
      "user": "u1@u1.com"
    }
  }
}

所以,我正在设置索引并且搜索正在使用routing信息。

我想使用_reindex api重新索引另一个索引上的所有文档。创建新索引后,我创建了所有别名。因此,我发现必须使用别名对文档进行重新索引才能保留路由策略。

有没有办法在_reindex设置它?

示例:

POST _/_reindex
{
  "source": {
    "index": "old"
  },
  "dest": {
    "index": "new"
  }
}
'

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

是的,你可以:

POST _reindex
{
  "source": {
    "index": "old",
    "query": {
      "term": {
        "user": "u1@u1.com"
      }
    }
  },
  "dest": {
    "index": "new",
    "routing": "=u1@u1.com"
  }
}

答案 1 :(得分:0)

根据this documentation

  

默认情况下,如果_reindex看到包含路由的文档,则路由将被保留,除非脚本更改了该路由。

所以,到目前为止,我已经能够确定每个已经保存了routing信息的文档。