Elasticsearch 数据类型相关总结:快速参考指南【记录】

在Elasticsearch中,有多种数据类型可用于定义字段。

在开始了解数据类型之前,首先要知道,在Elasticsearch中,分词处理主要针对文本字段,而对于其他类型字段(如数值、日期、布尔等),通常不会进行分词处理。这是因为文本字段需要支持全文搜索、模糊匹配和文本分析,而其他类型字段通常用于精确匹配和聚合计算,不需要进行分词。

一、了解字符串类型(string)

在ES早期版本有一个string数据类型,使用string类型时,有两种用法(通过index来区分):

全文检索分词index=analysis按单个字符匹配被称作analyzed字符串
关键词搜索不分词index=not_analysis按照整个文本进行匹配被称为not-analyzed字符串

Elasticsearch在5.0版本中引入了text和keyword数据类型用于替代string类型。

下面我们通过一个示例来对比,ES分别如何使用string和text/keyward来创建索引:

例:假设我现在要创建名为my_index的索引,包含一个tag的字段(分词),以及一个foo的字段(不分词):

1)在Elasticsearch2.0版本的DSL语句:

PUT /my_index
{
  "mappings": {
  	"_doc":{
	    "properties": {
	      "tag": {
	        "type": "string",
	        "index": "analyzed"
	      },
	      "foo": {
	        "type": "string",
	        "index": "not_analyzed"
	      }
	    }
	 }
  }
}

2)在Elasticsearch5.0版本的DSL语句:

PUT /my_index
{
  "mappings": {
  	"_doc":{
	    "properties": {
	      "tag": {
	        "type": "text",
	        "analyzer": "standard"
	      },
	      "foo": {
	        "type": "keyword"
	      }
	    }
	 }
  }
}

总结:简而言之,无非就是5.0版本为string找了一个替代方案,text(分词)用于全文检索,keyword(不分词)用于聚合和排序。

扩展:在Elasticsearch中,"analyzer"是用于指定文本字段如何被分析的部分。它定义了在建立索引时和搜索时如何处理文本数据的过程。在提供的示例中,"analyzer"属性指定了"standard"分析器,这意味着文本字段将使用标准分析器进行处理。标准分析器将文本分成单词,并且会根据一些规则进行标准化,例如将单词转为小写。

注意:在Elasticsearch中,在创建索引定义mapping映射时,如果您只有一个字段,可以省略"properties",直接将字段定义放在"_doc" 下。这种情况下,您可以简化索引的创建过程。

注意:从Elasticsearch 7.0版本开始,一个索引只能包含一个类型,因此在创建索引时可以省略type。在示例中,我已经省略了type,因为在较新的Elasticsearch版本中,这是一个可选的设置。

二、简单的数据类型

1、文本类型(text):当一个字段是要被全文检索的,比如Email内容、产品描述,应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。文本类型通常用于存储文本数据,支持全文搜索和分析。

2、关键字类型(keyword):这种类型适用于结构化的字段,例如:标签、email地址、手机号等,这种类型的字段可以用作过滤、排序、聚合等。用于存储关键字数据,不会被分词,通常用于精确匹配和聚合操作。

3、Numeric类型:用于存储数值类型的数据,包括整数类型(integer、long、short、byte)和浮点数类型(float、double),Numeric类型支持范围查询、排序和聚合操作,在满足需求的情况下,优先使用范围小的字段。字段长度越短,索引和搜索的效率越高。

  • Integer类型(integer):用于存储整数数据,支持有符号的32位整数,范围为-2^312^31-1

  • Long类型(long):用于存储长整数数据,支持有符号的64位整数,范围为-2^632^63-1

  • Short类型(short):占用2个字节,范围为-32,768至32,767;

  • Byte类型(byte):占用1个字节,范围为-128至127;

  • Float类型(float):用于存储单精度浮点数数据,占4个字节;

  • Double类型:用于存储双精度浮点数数据,占8个字节;

下面是一个创建数值类型字段的示例,其它字段同理:

PUT /my_index
{
  "mappings": {
    "_doc": {
      "amount": {
        "type": "integer"
      }
    }
  }
}

4、日期类型(date):用于存储日期和时间数据,由于JSON中没有日期类型,所以es中的日期类型形式比较多样。

  • 包含格式化日期的字符串, “2024-01-016"或"2024/01/16 12:10:30”;
  • 代表时间毫秒数的长整型数字;
  • 代表时间秒数的整数。

如果在Elasticsearch中未指定日期类型的格式,则默认格式是 “strict_date_optional_time||epoch_millis”。strict_date_optional_time 表示日期时间格式,epoch_millis 表示以毫秒为单位的时间戳。这意味着Elasticsearch会尝试解析日期字符串,如果失败,它将尝试解析为时间戳。

1)使用日期格式示例:

## 创建索引,添加映射
PUT my_index
{
    "mappings": {
        "_doc": {
            "pub_date": {"type": "date"}
        }
    }
}

## 添加数据
PUT my_index/_doc/11
{ "pub_date": "2018-10-10" }
## Solr中默认使用的日期格式
PUT my_index/_doc/11
{ "pub_date": "2018-10-10T12:00:00Z" }
 ## 时间的毫秒值
PUT my_index/_doc/11
{ "pub_date": "1589584930103" }

2)多种日期格式:多个格式使用双竖线||分隔, 每个格式都会被依次尝试, 直到找到匹配的。

## 添加映射
PUT my_index
{
    "mappings": {
        "_doc": {
        	"pub_date": {
                 "type": "date", ## 可以接受如下类型的格式
                 "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
        }
    }
}

5、布尔类型(boolean):用于存储布尔值,可以接受表示真、假的字符串或数字。

  • 真值: true、“true”、“on”、“yes”、“1”…
  • 假值: false、“false”、“off”、“no”、“0”、“”(空字符串)、0.0、0

6、 二进制型(binary):二进制类型是Base64编码字符串的二进制值,不以默认的方式存储,且不能被搜索。用于存储二进制数据,如图片、音频或视频文件。

## 添加映射
PUT my_index
{
    "mappings": {
        "_doc": {
            "properties": {
            	"title": {"type" : "text"}
                "blob": {"type": "binary"}
            }
        }
    }
}
## 添加数据
PUT my_index/_doc/1
{
    "title": "Some binary blog",
    "blob": "hED903KSrA084fRiD5JLgY=="
}

注意:在Elasticsearch中,Base64编码的二进制值应该是连续的,不应该包含换行符\n

7、范围类型(range):range类型支持以下几种:

在这里插入图片描述
(1) 添加映射:

PUT /company
{
  "mappings": {
    "properties": {
      "expected_number": {
        "type": "integer_range"
      },
      "time_frame": {
        "type": "date_range",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      },
      "ip_whitelist": {
        "type": "ip_range"
      }
    }
  }
}

(2) 添加数据:

POST /company/_doc
{
  "expected_number": {
    "gte": 100,
    "lte": 500
  },
  "time_frame": {
    "gte": "2022-01-01",
    "lte": "2023-01-01"
  },
  "ip_whitelist": "192.168.1.0/24"
}

(3) 查询数据:

GET /company/_search
{
  "query": {
    "range": {
      "expected_number": {
        "gte": 200
      }
    }
  }
}

查询结果:

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "company",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "expected_number": {
            "gte": 100,
            "lte": 500
          },
          "time_frame": {
            "gte": "2022-01-01",
            "lte": "2023-01-01"
          },
          "ip_whitelist": "192.168.1.0/24"
        }
      }
    ]
  }
}

三、复杂的数据类型

暂时整理到这里,下面类型详细内容,后续抽空补充

1、Array类型:用于存储数组数据。Array类型可以包含多个相同或不同类型的元素,并支持按数组中的某个元素进行查询。

2、Object类型:用于存储复杂的结构化数据。Object类型类似于关系型数据库中的行,可以包含多个属性字段。

3、嵌套类型(nested):嵌套类型是对象数据类型的一个特例, 可以让array类型的对象被独立索引和搜索。

3、Geo类型(geo_point):用于存储地理位置数据。Geo类型支持点、线、多边形等地理形状的索引和查询。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MCM备赛笔记——熵权法

Key Concept 熵权法是一种基于信息熵概念的权重确定方法,用于多指标决策分析中。信息熵是度量信息量的不确定性或混乱程度的指标,在熵权法中,它用来反映某个指标在评价过程中的分散程度,进而确定该指标的权重。指标的分散程度越高…

[C#]winform部署openvino调用padleocr模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR 【算法介绍】 OpenVINO和PaddleOCR都是用于计算机视觉应用的工具,但它们有不同的特点和用途。OpenVINO是一个由Intel开发的开源工具套件,主要用于加速深度学习推理,而PaddleOC…

Javaweb之SpringBootWeb案例员工管理之删除员工的详细解析

3.3 删除员工 查询员完成之后,我们继续开发新的功能:删除员工。 3.3.1 需求 当我们勾选列表前面的复选框,然后点击 "批量删除" 按钮,就可以将这一批次的员工信息删除掉了。也可以只勾选一个复选框,仅删除一…

【开源】基于JAVA语言的免税店商城管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2 研究方法 三、系统展示四、核心代码4.1 查询免税种类4.2 查询物品档案4.3 新增顾客4.4 新增消费记录4.5 审核免税 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的免税店商城管理系…

代码之外:工程师的成长进阶秘籍

程序员只懂技术能行吗? 为什么说技术人员“说”和“写”总得擅长一个? 你以为的“关注结果”是真的结果吗? 从一线工程师跃升团队管理者一共分几步? 在不断变化的职场环境中,技术人如何保持竞争力并实现自我增值&a…

【消息队列】RocketMQ 生产和消费中的集群模式和广播模式

在消息队列系统中,生产者和消费者的模式通常包括集群模式和广播模式。这两种模式分别用于不同的场景,具有不同的特点和优势。 1. 集群模式(Cluster Mode): 在集群模式下,多个相同角色的实例组成一个集群&…

精品量化公式——“筹码动态”,筹码动态改进版,增加了三个买点信号标识

不多说,直接上效果如图: ► 日线表现 代码评估 技术指标代码评估: 散筹估算: 使用EMA(指数移动平均)方法计算(WINNER(C*1.1)-WINNER(C*0.9))*70的3日均线,用黄色粗线表示。这是用于估算市场中散户投资者的…

三维重建(3)--单视几何

目录 一、无穷远点、无穷远线、无穷远平面 1、2D平面上的无穷远问题 2、3D平面上的无穷远问题 二、影消点与影消线 1、2D平面上的无穷远点,无穷远线变换 2、影消点 3、影消线 三、单视重构 1、两平行线夹角与影消线关系 2、单视图标定 一、无穷远点、无…

Vue3 在 history 模式下通过 vite 打包部署白屏

Vue3 在 history 模式下通过 vite 打包部署后白屏; 起因 hash 模式 url 后面跟个 # 强迫症犯了改成了 history,就此一波拉锯战开始了 ... 期间 nigix 和 router 各种反复排查尝试最终一波三折后可算是成功了 ... Vue官方文档 具体配置可供参考如下: 先简要介绍下,当前项目打包…

【网站项目】331基于jsp的超市库存商品管理系统

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

paramiko 、netmiko抛出 No existing session的解决方法。

写这篇文章,是因为我在H3C交换机上很正常的代码,可以ssh登录,但huawei交换机上失败,用CSDN上的文章关于allow_agentFalse,look_for_keysFalse 处理还是失败后,找相关的一些帖子总结的必须修改paramiko的源代码文章。 如…

Mysql:重点且常用的 SQL 标签整理

目录 1 <resultMap> 标签 2 <sql> 标签 3 <where> 标签 4 <if> 标签 5 <trim> 标签 6 <foreach> 标签 7 <set> 标签 1 <resultMap> 标签 比如以下代码&#xff1a; <resultMap type"SysCollege" id&qu…

【2024.1.19练习】B:01串的熵

B: 01串的熵&#xff08;5分&#xff09; 问题描述 对于一个长度为23333333的01串&#xff0c;如果其信息熵为11625907.5798&#xff0c;且0 出现次数比1 少&#xff0c;那么这个01 串中0出现了多少次&#xff1f; 我的代码&#xff1a; 注意调用<cmath>以便于对数运算…

Android-三方框架的源码

ARouter Arouter的整体思路是moduelA通过中间人ARouter把路由信息的存到仓库WareHouse&#xff1b;moduleB发起路由时&#xff0c;再通过中间人ARouter从仓库WareHouse取出路由信息&#xff0c;这要就实现了没有依赖的两者之间的跳转与通信。其中涉及Activity的跳转、服务prov…

2024 Move开发者大会在上海圆满落幕,第三期星航计划启动

*以下文章来源于MoveFuns &#xff0c;作者MoveFuns 至各位Mover&#xff1a; 2024 Move DevConfShanghai 圆满成功。在这次盛会上&#xff0c;我们围绕着Move生态关键的一年这一主题进行了深入的讨论和交流。 以下是本次会议的总结回顾&#xff1a; 大会盛况 本次大会在上…

大模型学习与实践笔记(九)

一、LMDeply方式部署 使用 LMDeploy 以本地对话方式部署 InternLM-Chat-7B 模型&#xff0c;生成 300 字的小故事 2.api 方式部署 运行 结果&#xff1a; 显存占用&#xff1a; 二、报错与解决方案 在使用命令&#xff0c;对lmdeploy 进行源码安装是时&#xff0c;报错 1.源…

innoDB存储引擎

1.逻辑存储结构 行数据->行->页->区->段->表空间 表空间(ibd文件)&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;来存储记录&#xff0c;索引等数据。 段&#xff1a;分为数据段和索引段&#xff0c;回滚段&#xff0c;数据段就是B树的叶子节点&am…

神器yakit之web fuzzer功能

前言 yakit并不像burp一样单独设置爆破模块&#xff0c;但是yakit也是可以爆破的&#xff0c;并且更好用&#xff08;个人感觉&#xff09;。 手工测试场景中需要渗透人员对报文进行反复的发送畸形或者特定的payload进行查看服务器的反馈并以此来进行下一步的判断。 Fuzz标签便…

Gazebo的模型下载。

git clone zouxu634866/gazebo_modelshttps://gitee.com/zouxu6348660/gazebo_models.git&#xff0c;并完成路径配置。 &#xff08;本文提供了gitee下载&#xff0c;国外的Github下载较慢。&#xff09;