ElasticSearch 按照一定规则分割index

qingmoucsdn 2019-06-28

ElasticSearch随着数据越来越大,查询时间也越来越慢,把所有数据放入同一个索引将不是一个好的方法。

所以优化时,将其按照一定规则重新reindex将提高不少效率

按照某字段的日期

比如将index_name重新索引为index_name-yyyy-MM-dd
根据字段created_at,原日期格式是"yyyy-MM-dd'T'HH:mm:ss,计算得出yyyy-MM-dd

inline中是 是类Java代码, 可以复制出来后自己编写
POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "index_name"
  },
  "dest": {
    "index": "index_name-"
  },
  "script": {
    "inline": "def sf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss\");def o = new SimpleDateFormat(\"yyyy-MM-dd\");def dt = sf.parse(ctx._source.created_at);ctx._index='index_name-' + o.format(dt);"
  }
}

按照ID范围

比如根据ID / 10000000取整,也就是1千万数据放一个index

POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "index_name"
  },
  "dest": {
    "index": "index_name-"
  },
  "script": {
    "inline": "ctx._index='index_name-' + Long.valueOf(ctx._source.id / 10000000).toString();"
  }
}

相关推荐