ElasticSearch-04-索引、类型、映射

1、简单介绍

Elasticsearch是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。

对比关系:

在这里插入图片描述

详细说明:

概念说明
索引库(indexes)索引库包含一堆相关业务,结构相似的文档document数据,比如说建立一个商品product索引库,里面可能就存放了所有的商品数据。
类型(type)type是索引库中的一个逻辑数据分类,一个type下的document,都有相同的field,类似于数据库中的表。比如商品type,里面存放了所有的商品document数据。6.0版本以后一个index只能有1个type,6.0版本以前每个index里可以是一个或多个type。
文档(document)文档是es中的存入索引库最小数据单元,一个document可以是一条客户数据,一条商品数据,一条订单数据,通常用JSON数据结构表示。document存在索引库下的type类型中。
字段(field)Field是Elasticsearch的最小单位。一个document里面有多个field,每个field就是一个数据字段
映射配置(mappings)类型对文档结构的约束叫做映射(mapping),用来定义document的每个字段的约束。如:字段的数据类型、是否分词、是否索引、是否存储等特性。类型是模拟mysql中的table概念。表是有结构的,也就是表中每个字段都有约束信息;

2、索引库的操作

2.1 语法

创建索引库

put /索引库名

查看索引库

get /索引库名

删除索引库

delete /索引库名

2.2 题目

创建索引库 test
查看索引库 test
删除索引库 test
查看索引库 test

2.3 答案

#创建索引库 test
put /test

#查看索引库 test
get /test

#删除索引库 test
delete /test

#查看索引库 test
get /test

3、类型及映射操作

有了 索引库,等于有了数据库中的database。接下来就需要索引库中的类型了,也就是数据库中的。创建数据库表需要设置字段约束,索引库也一样,在创建索引库的类型时,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做字段映射(mapping)
字段的约束包括但不限于:

  • 字段的数据类型
  • 是否要存储
  • 是否要索引
  • 是否分词
  • 分词器是什么

我们一起来看下创建的语法。

3.2 创建映射字段

3.2.1 语法

请求方式依然是PUT

PUT /索引库名/_mapping/类型名称 或 索引库名/类型名称/_mapping
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true"store": true"analyzer": "分词器"
    }
  }
}
  • 类型名称:就是前面将的type的概念,类似于数据库中的表
  • 字段名:任意填写,下面指定许多属性,例如:
    type:类型,可以是text、long、short、date、integer、object等
    index:是否索引,默认为true
    store:是否存储,默认为false
    analyzer:分词器,这里的ik_max_word即使用ik分词器

3.2.2 示例

test这个索引库添加了一个名为goods的类型,并且在类型中设置了4个字段:

title:商品标题

subtitle: 商品子标题

images:商品图片

price:商品价格

#创建索引库
put /heima

#查看索引库
get /heima

#创建类型和映射关系
put /heima/_mapping/goods
{
  "properties" : {
    "title" : {
      "type" : "text",
      "analyzer" : "ik_max_word"
    },
    "subtitle" : {
      "type" : "text",
      "analyzer" : "ik_max_word"
    },
    "images" : {
      "type" : "text",
      "index" : "false"
    },
    "price" : {
       "type" : "float"
    }
  }
}

在这里插入图片描述

3.2.3 映射属性详解

3.2.3.1 type

Elasticsearch中支持的数据类型非常丰富:
在这里插入图片描述

我们说几个关键的:

  • String类型,又分两种:

    • text:可分词,不可参与聚合
    • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
  • Numerical:数值类型,分两类

    • 基本数据类型:long、interger、short、byte、double、float、half_float
    • 浮点数的高精度类型:scaled_float
    • 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
  • Date:日期类型

    • elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
  • Array:数组类型

    • 进行匹配时,任意一个元素满足,都认为满足
    • 排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序
  • Object:对象
{
    name:"Jack",
    age:21,
   	girl:{
		name: "Rose", age:21
   }
}

如果存储到索引库的是对象类型,例如上面的girl,会把girl编程两个字段:girl.name和girl.age

3.2.3.2 index

index影响字段的索引情况。

  • true:字段会被索引,则可以用来进行搜索。默认值就是true

  • false:字段不会被索引,不能用来搜索

index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。

3.2.3.3 store

是否将数据进行独立存储。

原始的文本会存储在_source里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。

4、 查看映射关系

4.1 语法

GET /索引库名/_mapping/类型名

4.2 示例

get /test/_mapping/goods

4.3 响应

在这里插入图片描述

5、一次性创建索引库和类型(常用)

刚才的案例中我们是把创建索引库和类型分开来做,其实也可以在创建索引库的同时,直接制定索引库中的类型,基本语法:

put /索引库名
{
    "settings":{
        "索引库属性名":"索引库属性值"
    },
    "mappings":{
        "类型名":{
            "properties":{
                "字段名":{
                    "映射属性名":"映射属性值"
                }
            }
        }
    }
}

来尝试一下吧:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值