- Rest风格API
Elasticsearch提供了Rest风格的API,即http请求接口
- 基本概念
Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。
索引(indices) |
Databases 数据库 |
类型(type) |
Table 数据表 |
文档(Document) |
Row 行 |
字段(Field) |
Columns 列 |
- 索引库(indices):indices是index的复数,代表许多的索引
- 类型(type):类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念
- 文档(document):存入索引库原始的数据。比如每一条商品信息,就是一个文档
- 字段(field):文档中的属性
- 映射配置(mappings):字段的数据类型、属性、是否索引、是否存储等特性
1.官网
Elasticsearch Guide [6.8] | Elastic
- 索引操作
- 创建索引:put请求
- 2.使用kibana创建索引
- 请求方式:PUT
- 请求路径:索引库名
- 请求参数:json格式
put book { "settings":{ "number_of_shards":1, /*分片数量*/ "number_of_replicas":0 /*副本数量*/ } }
- number_of_shards 是指索引要做多少个分片,只能在创建索引时指定,后期无法修改。
- number_of_replicas 是指每个分片有多少个副本,后期可以动态修改
- 什么是分片?
ES中所存数据的文件块,也是数据的最小单元块。假如有2个分片,插入10条数据,默认,每个分片存5条。
- 查看索引:get请求
get 索引库名
我们可以使用*来查询所有索引库
- 删除索引:delete请求
delete 索引库名
- 映射配置
创建索引库,就相当于mysql创建“数据库”。接着我们来配置映射,相当于mysql创建“表结构”。
1.在ElasticSearch中,我们常配置:
- 字段的数据类型
- 是否要存储
- 是否要索引
- 是否分词
- 分词器是什么
- 创建映射关系
PUT /索引库名/_mapping/类型名称
{ "properties": { "字段名": { "type": "类型", "index": true, "store": true, "analyzer": "分词器" } } }
1.类型名称:基本概念中所说的type,类似于数据库中的表
1.字段名:类似于数据库中的列名。
- type:类型,可以是text、keyword、long、short、date、integer、object等
- index:是否索引,默认为true
- store:是否存储,默认为false
- analyzer:分词器,这里的`ik_max_word`即使用ik分词器
2.实例
/* 1.先创建索引 */ put czxy /* 2.创建映射关系 */ put czxy/_mapping/book { "properties": { "title": { "type": "text", "analyzer": "ik_max_word" }, "images": { "type": "keyword", "index": "false" }, "price": { "type": "float" } } }
- 查看映射关系
GET /索引库名/_mapping
- 字段属性详解
1)type
1.Elasticsearch中支持的数据类型非常丰富
1.String类型,又分两种:
- text修饰字符串,默认进行分词,并生成索引。不能用来过滤、排序和聚合等操作。
- keyword修饰字符串,不会分词,不会建立索引。常常被用来过滤、排序和聚合。
2.Numerical:数值类型,分两类
- 基本数据类型:long、interger、short、byte、double、float、half_float
- 浮点数的高精度类型:scaled_float
- 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
3.Date:日期类型
- elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
2)index
index影响字段的索引情况。
- true:字段会被索引,则可以用来进行搜索。默认值就是true
- false:字段不会被索引,不能用来搜索
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。
3)store
是否将数据进行额外存储。
Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做`_source`的属性中。而且我们可以通过过滤`_source`来选择哪些要显示,哪些不显示。
而如果设置store为true,就会在`_source`以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,**store的默认值就是false。**
- 数据操作
- 添加数据
- 语法:没有id
POST _index/_type/ { "属性": "值", .... }
- 实例
POST czxy/book/ { "title": "标题", "price": 1234 }