ElasticSearch(4) -- 类型

tech2022-11-03  127

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概念。表是有结构的,也就是表中每个字段都有约束信息;

1. 索引库操作

创建索引库

put /索引库名

查看索引库

get /索引库名

删除索引库

delete /索引库名

2. 类型及映射操作

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

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

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分词器

2.2 映射属性详解

2.2.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. 查看映射关系

3.1 语法

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

4. 一次创建索引库和类型(常用)

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

put /索引库名 { "settings":{ "索引库属性名":"索引库属性值" }, "mappings":{ "类型名":{ "properties":{ "字段名":{ "映射属性名":"映射属性值" } } } } }
最新回复(0)