共计 752 个字符,预计需要花费 2 分钟才能阅读完成。
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();”
}
}