目录
基本概念
1.Elasticsearch和MySQL对比
索引(indices)相当于数据库Databases
类型(type)相当于数据表Table
文档(Document)相当于行Row
字段(Field)相当于列 Columns
概念 | 说明 |
---|---|
索引库(indices) | indices是index的复数,代表许多的索引, |
类型(type) | 类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念 |
文档(document) | 存入索引库原始的数据。比如每一条商品信息,就是一个文档 |
字段(field) | 文档中的属性 |
映射配置(mappings) | 字段的数据类型、属性、是否索引、是否存储等特性 |
2.Elasticsearch的分布式
shard即分片指数据拆分后的各个部分,replica即副本指每个分片的复制
elasticsearch的分布式导致即使你只有一个节点,它也会默认对你的数据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。
操作索引
elasticsearch采用Rest风格API,因此其API就是一次http请求,你可以用任何工具发起http请求
1.创建索引的请求格式
- 请求方式: PUT
- 请求路径: /索引库名
- 请求参数: json格式
- 存储库的设置:settings
-
number_of_shards:分片数量
-
number_of_replicas:副本数量
-
- 存储库的设置:settings
示例
PUT /heima
{
"settings": {
"number_of_shards": 1
, "number_of_replicas": 0
}
}
2.查看索引
GET /索引库名
我们也可以使用*来查询所有索引库配置
GET *
3.删除索引
DELETE /索引库名
4.映射配置
映射是定义文档的过程,文档包含哪些字段,这些字段是否保存,是否索引,是否分词等等
- 创建映射
语法
PUT /索引库名/_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分词器
请求示例
PUT heima/_mapping/goods
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"images": {
"type": "keyword",
"index": "false"
},
"price": {
"type": "float"
}
}
}
响应结果
{
"acknowledged": true
}
- 查看映射关系
语法
GET /索引库名/_mapping
示例
GET /heima/_mapping
响应
{
"heima": {
"mappings": {
"goods": {
"properties": {
"images": {
"type": "keyword",
"index": false
},
"price": {
"type": "float"
},
"title": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}
}
- 字段属性详解
5.新增数据
通过POST请求,可以向一个已经存在的索引库中添加数据。
- 语法
POST /索引库名/类型名
{
"key":"value"
}
- 示例
POST /heima/goods/
{
"title":"小米手机",
"images":"http://image.leyou.com/12479122.jpg",
"price":2699.00
}
- 自定义id的语法
POST /索引库名/类型/id值
{
...
}
- 示例
POST /heima/goods/2
{
"title":"大米手机",
"images":"http://image.leyou.com/12479122.jpg",
"price":2899.00
}
- 智能映射
在新增数据时你不需要给索引库设置任何mapping映射,它也可以根据你输入的数据来判断类型,动态添加数据映射。例如我们输入
再通过命令查看映射
GET /heima/_mapping
就可以看到系统自动给添加的类型
6.修改数据
把刚才新增的请求方式改为PUT,就是修改了。不过修改必须指定id,如果没指定或者指定的id不存在就会执行新增操作,示例
PUT /heima/goods/3
{
"title":"超大米手机",
"images":"http://image.leyou.com/12479122.jpg",
"price":3899.00,
"stock": 100,
"saleable":true
}
7.删除数据
删除使用DELETE请求,同样,需要根据id进行删除:
DELETE /索引库名/类型名/id值