ElasticSearch系列03:ES的数据类型

2020-05-22 00:00:00 数据 类型 数据类型 中国 分词
引言:上一节,我们学习了ES的基本概念和ES的数据架构。今天,TeHero将为大家讲解ES的数据类型。
数据的存储,都是需要预先确定好数据的类型的,不管是关系型数据库mysql还是非关系型数据库MongoDB,都有一套数据类型系统(两者很类似,但也有区别)。那么ES的数据类型有哪些呢?TeHero为你倾情讲解^~^。

ES的数据类型汇总

ES数据类型汇总图(注意标红的类型)

从上图可以看到ES的数据类型和mysql或MongoDB的是很相似的,所以对于有数据结构基础的伙伴,这个知识点是非常轻松的。

TeHero将详细为大家介绍上图中标红的4种数据类型(数值类型就很一目了然)【ps:如果你还想了解其他的类型,可以直接进ES的官网阅读】,让大家在以后的工作中能熟练使用,知道什么时候该用哪种类型,该怎么用。

一、String 类型

String类型可以和java的string、mysql的varchar等同,但是为何会分为text、keyword呢?这两者又有什么区别?
ES作为全文检索引擎,它强大的地方就在于分词和倒排序索引。而 text 和 keyword 的区别就在于是否分词(ps:什么叫分词?举个简单例子,“中国我爱你”这句话,如果使用了分词,那么这句话在底层的储存可能就是“中国”、“我爱你”,被拆分成了两个关键字),分词后面TeHero会专门写文章进行讲解,关注公众号:ZeroTeHero,敬请期待。

1)text——会分词

就拿刚才的例子来说,“中国我爱你”这句话,如果使用text类型储存,我们不去特殊定义它的分词器,那么ES就会使用默认的分词器 standard 。

ES的分词器(可先有个概念)

下图就是“中国我爱你”的ES分词效果:

这意味着什么呢?如果你使用text类型去储存你本不想分词的string类型,你在查询的时候,查询结果将违背你的预期。

简单看个示例:

# 创建索引
PUT /toherotest
{
  "mappings": {
    "_doc":{
      "properties" : {
                "field1" : { "type" : "text" }
            }
    }
  }
}
# 存入数据
POST /toherotest/_doc/1
{
  "field1":"中国我爱你"
}

相关文章