欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记一次ES重构字段结构&迁移数据&根据querydate排序取最新一条数据

程序员文章站 2022-07-14 22:33:29
...

目录

 

一、需求背景

二、问题来源

三、重构文档结构

1、新建索引deviceinfo,修改制定字段的类型

2、数据迁移,将deviceinfo_es的数据迁移到新index

3、删除原index

四、排序需求

五、参考


一、需求背景

现在ES中存储的通讯录信息,每次更新都累加,导致数据量一直在增大,影响下游的数据处理。于是提出,数据只提供最新的那一条给下游。思路是根据querydate,检索出最新的一条数据。

二、问题来源

querydate的类型是string,导致在排序时不对。在试验了之后,发现果然是querydate的数据类型搞的鬼,Date类型就没问题。

三、重构文档结构

1、新建索引deviceinfo,修改制定字段的类型

记一次ES重构字段结构&迁移数据&根据querydate排序取最新一条数据

{
  "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

记一次ES重构字段结构&迁移数据&根据querydate排序取最新一条数据

{
  "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"
      }
    }
  ]
}

记一次ES重构字段结构&迁移数据&根据querydate排序取最新一条数据

 

可以看到,querydate按照时间降序排序了,sort值就是对应的时间毫秒数。

五、参考

https://blog.csdn.net/apple9005/article/details/90415558

https://www.cnblogs.com/Ace-suiyuan008/p/9985249.html 

 

相关标签: ES