记一次ES重构字段结构&迁移数据&根据querydate排序取最新一条数据
程序员文章站
2022-07-14 22:33:29
...
目录
2、数据迁移,将deviceinfo_es的数据迁移到新index
一、需求背景
现在ES中存储的通讯录信息,每次更新都累加,导致数据量一直在增大,影响下游的数据处理。于是提出,数据只提供最新的那一条给下游。思路是根据querydate,检索出最新的一条数据。
二、问题来源
querydate的类型是string,导致在排序时不对。在试验了之后,发现果然是querydate的数据类型搞的鬼,Date类型就没问题。
三、重构文档结构
1、新建索引deviceinfo,修改制定字段的类型
{
"mappings": {
"deviceInfo_td": {
"properties": {
"queryDate": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"data": {
"type": "string"
},
"user_id": {
"type": "string"
},
"source": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
……
}
}
修改querydate的类型为Date。
2、数据迁移,将deviceinfo_es的数据迁移到新index
{
"source": {
"index": "deviceinfo_es"
},
"dest": {
"index": "deviceinfo"
}
}
3、删除原index
通过head插件的概览可以看到数据是否迁移完成,待迁移完成后,要将原索引删除,并给新索引简历别名deviceinfo_es。
要先删除在建别名,否则因为同名导致索引无法创建成功。
建议以后索引最好都建别名,方便维护。在此处,要是之前建立了别名,就无需删除原数据了,直接改别名的指向就好了。
四、排序需求
{
"from": 0,
"size": 10,
"query": {
"match": {
"user_id": {
"query": "13eff4d7a7jhgjjhgjhghj89898989"
}
}
},
"sort": [
{
"queryDate": {
"order": "desc"
}
}
]
}
可以看到,querydate按照时间降序排序了,sort值就是对应的时间毫秒数。
五、参考
https://blog.csdn.net/apple9005/article/details/90415558
https://www.cnblogs.com/Ace-suiyuan008/p/9985249.html
上一篇: 282. Expression Add Operators
下一篇: 4, Django获取请求参数