Es索引中时间字段是字符串Range查询的正确姿势

news2024/11/20 18:31:16

文章目录

    • @[toc]
  • 1. 问题
  • 2. Es索引的mapping模式
    • 2.1 dynamic动态宽松模式(动态映射)
    • 2.2 strict严格模式(静态映射)
  • 3. text类型和keyword类型的区别
    • 3.1 text类型
    • 3.2 keyword类型
  • 4.正确姿势
  • 5. 总结

1. 问题

    由于之前搞了一个使用flink-cdc将mysql表中的数据同步到es的索引中,例子中数据库中的orders表中的order_date的字段类型是datetime类型,flink-sql建表orders、enriched_orders中的order_date 字段是TIMESTAMP(0)类型,同步到es的enriched_orders索引中的order_date的类型是:

查询索引的mapping结构语句:
GET enriched_orders/_mapping
enriched_orders索引的order_date字段类型如下:
"order_date" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
 }

    数据被同步到enriched_orders索引的时候不需要我们创建索引,该索引会自动创建,自动创建的也是可以使用的,如果业务的数据模型有特殊格式要求,可以自己重新设计下数据模型,然后自己先把索引创建好,然后使用cdc同步数据到索引中,需要注意的就是三边的字段的类型的对应,如果字段类型不对应估计是会报错的,这种方式我还没有试过的,哪哈具体的业务上在试下看看,然后就写了下面一个语句根据这个order_date字段查询一个时间范围的数据,DSL语句如下:

GET enriched_orders/_search
{
  "query": {
    "range": {
      "order_date": {
        "gte": "2020-07-30 10:00:00",
        "lte": "2020-07-31 10:38:11"
      }
    }
  }
}

    这种方式居然查不到数据,这也是有点奇葩的,这个问题是分词的问题。

2. Es索引的mapping模式

Elasticsearch 索引映射类型及mapping属性详解

https://www.knowledgedict.com/tutorial/elasticsearch-index-mapping.html

2.1 dynamic动态宽松模式(动态映射)

    Es默认索引的mapping是 dynamic:动态宽松模式,也就是随便写,数据自动冗余,es会根据你写入索引的字段数据进行自动推断该是什么类型,这种方式会导致:字段爆炸(字段膨胀)这种操作在有的时候是很危险的,也就是可以在mapping里面随意加字段,一个不小心随意加了字段可能就导致业务代码报错了,这种方式默认大小为:

index.mapping.total_fields.limit:1000  # dynamic 这种方式最多加到1000字段的限制,想超过1000可以修改这个参数

    可以加上dynamic:"false"的限制,dynamic 设置为 false 后,新来的非 mapping 预设字段数据可以写入,但是:不能被检索,仅支持 Get 获取文档的方式通过 _source 查看详情内容。

2.2 strict严格模式(静态映射)

    也就是当你在写入数据的时候,写入数据格式中的字段不是mapping中定义限定好的,那么将会写入失败,这个就不可以随随便便写入数据了,数据更严谨,一般还是推荐这种方式,先设计数据模型及使用了恰当的类型又使用了更低的存储更切合业务的需求,所以这个还是有必要设计一下的。

3. text类型和keyword类型的区别

3.1 text类型

  1. 会分词,然后进行索引
  2. 支持模糊、精确查询
  3. 不支持聚合
  4. 分词器默认standard ,对于中文来说就是按字分词
  5. 支持fields属性,可以在fields中添加keyword子类型,以实现精确检索

3.2 keyword类型

  1. 不进行分词,直接索引
  2. 支持模糊、精确查询
  3. 支持聚合
  4. 支持按字数建立索引,以便节约索引空间

4.正确姿势

GET enriched_orders/_search
{
  "query": {
    "range": {
      "order_date.keyword": {
        "gte": "2020-07-30 10:00:00",
        "lte": "2020-07-31 10:38:11"
      }
    }
  }
}

GET enriched_orders/_search
{
  "query": {
    "range": {
      "order_date.keyword": {
        "from": "2020-07-30 10:00:00",
        "to": "2020-07-31 10:38:11"
      }
    }
  }
}

    以上的查询语句都是在kibban可视化里执行的:

图片

5. 总结

    到此我的分享就已经结束了,希望能给你带来帮助,请一键三连,么么哒!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

230616安装SqlServer2017Express

230616安装SqlServer2017Express 下载地址 选择语言 Microsoft SQL Server 2017 Express 下载地址: 简体中文 感谢下载 Microsoft SQL Server 2017 Express 我将下载的文件的名称加上了SHA256值, 一长串 是一个 .exe 的自解压文件, 双击后,默认解压到同根文件夹\同名文件夹下,…

那些可以当源码学习的优质开源项目分享

本篇收集的是自己平时逛 Github 发现的一些优质的开源项目,为什么收集它? 借助优质的开源项目,我们不仅可以拿来二次开发快速实现想要的功能,而且还可以学习里面优秀的代码,提高我们的编程能力。读(拆解&am…

vue实现elementUI table表格树形结构-使用懒加载时-解决子节点增删改后,不刷新子节点数据问题

问题发现 在使用element-ui的table组件时,使用树形结构,并使用了懒加载,可出现了一个问题,在对当前节点添加一个子节点数据,或删除一个子节点数据时,当前节点的子节点数据并不自动刷新出来。element-ui官方…

景联文科技:一文详解关键点标注

关键点标注是计算机视觉领域的一种任务,指的是在图像或视频序列中标注出特定目标的关键点,这些关键点通常是目标的重要特征点或轮廓点,包括但不限于人体关节、面部特征点、车辆零部件等。通过对关键点的标注,可以为后续的目标跟踪…

19. 算法之分治算法

1. 概念 分治算法(divide and conquer)的核心思想其实就是四个字,分而治之 ,也就是将原问题划分成n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果&#xff…

微信小程序开发(1)

10分钟入门 - 微信小程序开发 微信小程序详细教程 小程序简介 小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。 小程序技术发展史 WeixinJSBridge.invoke(imagePreview, { 2. current: http://i…

大数据之路书摘:走近大数据——从阿里巴巴学习大数据系统体系架构

文章目录 1.数据采集层2.数据计算层3.数据服务层4.数据应用层 在大数据时代,人们比以往任何时候更能收集到更丰富的数据。但是如果不能对这些数据进行有序、有结构地分类组织和存储,如果不能有效利用并发掘它,继而产生价值,那么它…

SNMP软件及性能监控

SNMP(Simple Network Management Protocol)是一种用于网络管理的协议。通过SNMP,我们可以监测和管理网络设备、服务器等重要设备的性能和状况,从而确保网络的正常运行。但在开始使用之前,需要进行配置,以便…

计算机未来五年最吃香的4个职位,对女生超级友好!

今年计算机毕业的学弟学妹对于找工作感觉到非常焦虑,不知道该哪个方向就业才有出路。很多同学感觉在学校好像什么都学了,又好像什么都没学到,先不说企业会不会招,自己就连投简历的勇气都没有,生怕大把的简历投出去就石…

怎么买美股?有哪些美股购买常见问题?

美股市场是全球最大的股票市场,也是全球最受投资者关注的市场之一。许多投资者都想参与其中,但不知道如何买美股。上文中已经扩列了美股购买的基本规则,继续为大家分享美股购买常见问题的相关知识要点。更深入的认识美股交易。 美股购买常见问…

组装电子产品,如何避免SMT虚焊?

组装电子产品的工厂,主要包括两条生产线:SMT表面组装和DIP插件组装。SMT是把电子元件通过设备,贴到PCB线路板上面,然后通过炉子(一般是指回流焊炉)加热,把元件通过锡膏焊接固定到PCB板上&#x…

【C++】STL的deque容器

目录 3.1deque构造函数 3.2deque赋值操作 3.3deque大小操作 3.4deque插入 3.5deque删除 3.6deque数据存取 3.7deque排序操作 deque(双端队列)是double-ended queue 的一个不规则缩写。deque是具有动态大小的序列容器,可以在两端&#…

遗传算法[GA]

遗传算法 遗传算法 (Genetic Algorithm,GA) 是模拟生物在自然环境中的遗传和进化的过程而形成的自适应 全局优化搜索算法。 遗传算法借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种并行、高效、全局搜索的方法, 它能在搜索过程中自动获取和积累…

centos直接部署express

centos直接部署express 以下是在CentOS上部署Express应用程序的一般步骤: 1.安装Node.js 在CentOS系统上安装Node.js。可以使用以下命令安装Node.js: sudo yum install nodejs2.安装npm 安装完Node.js后,还需要安装npm(Node.…

数据库原理与应用第7章作业

数据库原理与应用第7章作业 一. 单选题(共10题,40分)二. 填空题(共3题,15分)三. 简答题(共1题,15分)四. 论述题(共2题,30分) 一. 单选…

测试“背锅侠”?软件测试人究竟背了多少锅?我不再背锅...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 实际上&#xff0…

多线程并发的一些常见的使用规范

目录 1. 多线程并发使用规范 1.1 指定线程名称 2. 尽量使用线程池 3.不允许使用Executors 4. 正确停止线程 5. 编写可停止的Runnable 6 . Runnable中必须捕获一切异常 7. 可考虑使用ThreadLocal 8. 缩短锁 9. 选择分离锁,分散锁甚至无锁的数据结构 10. 推…

【C/C++】标准库相关题型(一)

文章目录 1. vector底层实现原理1.1 类构成1.2 构造函数1.3 插入元素1.4 删除元素1.5 读取元素1.6 修改元素1.7 释放空间 2. vector内存增长机制2.1 特点2.2 内存增长特性2.3 内存增长过程2.4 内存清理2.5 注意事项 3. vector中reserve和resize的区别3.1 共同点3.2 区别3.3 应用…

在 ZBrush 和 Maya 中创建 Chris Hemsworth 的 3D 肖像

今天瑞云渲染小编给大家带来一篇Marius Prsel分享了 Chris Hemsworth 项目背后的工作过程,详细介绍了角色的头部、面部和头发是如何制作的,并解释了如何在 Arnold 中完成渲染,一起来看看吧! 简介 我的名字是Marius Prsel&#xf…

7个理由:从Java8升级到Java17【翻译】

原文地址: 7 Reasons to Migrate from Java 8 to Java 17 释放吧,Java的全部力量。[手动狗头] 简介 从Java8到Java18,Java已经经历了漫长的发展历程(Java20非长期维护版本)。同时也是从Java 8开始,Java生态系统发生…