Elasticsearch基础使用介绍(数据类型,索引操作)

环境准备

  • Elasticsearch 服务(单机或集群)
  • Kibana 服务

如果对ES不了解或没有上述环境,可以看下我之前的博客。

Elasticsearch入门基础和集群部署

Elasticsearch查看集群信息,设置ES密码,Kibana部署

进入 Kibana 开发工具
在这里插入图片描述

数据类型

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/mapping-types.html

基础数据类型

keyword

keyword类型是不进行切分的字符串类型。


这里的“不进行切分”指的是:在索引时,对keyword类型的数据不进行切分,直接构建倒排索引;在搜索时,对该类型的查询字符串不进行切分后的部分匹配。


keyword类型数据一般用于对文档的过滤、排序和聚合在现实场景中。
keyword经常用于描述姓名、产品类型、用户ID、URL和状态码等。keyword类型数据一般用于比较字符串是否相等,不对数据进行部分匹配,因此一般查询这种类型的数据时使用term查询

text

text类型是可进行切分的字符串类型。


这里的“可切分”指的是: 在索引时,可按照相应的切词算法对文本内容进行切分,然后构建倒排索引;
在搜索时,对该类型的查询字符串按照用户的切词算法进行切分,然后对切分后的部分匹配打分。一般查询这种类型的数据时使用match查询

数值类型

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/number.html

ES支持的数值类型有long、integer、short、byte、double、float、half float.scaled float和unsigned long等。


为节约存储空间并提升搜索和索引的效率,在实际应用中,在满足需求的情况下应尽可能选择范围小的数据类型。


数值类型的数据也可用于对文档进行过滤、排序和聚合。

boolean

用来表示 true 和 false

日期类型(date)

在ES中,日期类型的名称为date。ES中存储的日期是标准的UTC格式。

UTC(Universal Time Coordinated)叫做世界统一时间,中国大陆和 UTC 的时差是+8,也就是 UTC+8

在elasticsearch中的date类型可以是下面的形式:

  • 格式化好的字符串,比如"2015-01-01",“2015/01/01 12:10:30”
  • 一个long类型整数,代表从纪元以来的毫秒数
  • 一个integer类型整数,表示从纪元开始的秒数

实际上不管日期以何种格式写入,在 ES 内部都会先换成 UTC 时间并存储为 long 类型
注意:

  • long和integer必须是非负数
  • 使用带格式的日期表示1970年之前的日期
  • 日期将始终对外呈现为字符串

可以自定义日期格式(format),多个日期格式 用 || 分割

PUT my-index-000001
{
   
   
  "mappings": {
   
   
    "properties": {
   
   
      "date": {
   
   
        "type":   "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
    }
  }
}

如果不指定使用默认格式strict_date_optional_time||epoch_millis

其中strict _date_optional time的含义是严格的时间类型,支持
yyyy-MM-dd、
yyyyMMdd.yyyyMMddHHmmss、
yyyy-MM-ddTHH:mm:ss、
yyyy-MM-ddTHH:mm:ss.SSS
yyyyMM-ddTHH:mm:ss.SSSZ等格式
epoch milis的含义是从1970年1月1日0点到现在的毫秒

注意strict_date_optional_time 并不支持 yyyy-MM-dd HH:mm:ss 格式
如果需要,需要指定formatyyyy-MM-dd HH:mm:ss

复杂数据类型

数组类型

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/array.html

ES数组没有定义方式,其使用方式是开箱即用的,即无须事先声明。
在写入时把数据用中括号 [] 括起来,由ES对该字段完成定义。

PUT my-index-000001/_doc/1
{
   
   
  "message": "some arrays in this document...",
  "tags":  [ "elasticsearch", "wow" ], 
  "lists": [ 
    {
   
   
      "name": "prog_list",
      "description": "programming list"
    },
    {
   
   
      "name": "cool_list",
      "description": "cool stuff list"
    }
  ]
}

当然,如果事先已经定义了字段类型,在写数据时以数组形式写入,ES也会将该类型转为数组。

数组应该不算一个纯粹的数据类型,而是一种逻辑存储方式
数组中的所有值都必须是 相同的数据类型。

数组类型的字段适用于元素类型的搜索方式,也就是说,数组元素适用于什么搜索,数组字段就适用于什么搜索。

例如,数组元素类型是keyword,该类型可以适用于term搜索。

对象类型

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/object.html

对象类型 也不用事先定义,在写入文档时 ES 会自动识别转化为对象类型。
在写入数据时 使用花括号 {} 括起来,ES将自动识别为 对象类型

PUT my-index-000001/_doc/1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RwTo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值