Elaticsearch REST API
一、API
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
- REST风格API
- Java REST Client
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html
1.基本概念
Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。如下
- 对标关系
Elasticsearch | Mysql |
---|---|
索引库 indices | 数据库 Database |
类型 type | 库表 Table |
文档 Document | 行 Row |
字段 Field | 列 column |
- 详细说明
概念 | 说明 |
---|---|
索引库 indices | indices是index的复数,代表许多的索引, |
类型type | 类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念 |
文档(document) | 存入索引库原始的数据。比如每一条商品信息,就是一个文档 |
字段(field) | 文档中的属性 |
映射配置(mappings) | 字段的数据类型、属性、是否索引、是否存储等特性 |
- 索引集(Indices,index的复数):逻辑上的完整索引
- 分片(shard):数据拆分后的各个部分
- 副本(replica):每个分片的复制
- 要注意的是:Elasticsearch本身就是分布式的,因此即便你只有一个节点,Elasticsearch默认也会对你的数据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。
2.创建索引
http://:/<索引>/<类型>/<文档ID> 从ES 7.0.0开始,移除Type(类型)这个概念文本
http://:/<索引>/_doc/<文档ID> // Type 字段那里变为固定值 _doc
2.1 语法(indices 建库)
创建索引的请求格式:
PUT /<index>/_doc/<_id>
POST /<index>/_doc/
PUT /<index>/_create/<_id>
POST /<index>/_create/<_id>
-
请求方式:PUT
-
请求路径:/index索引库名
-
请求参数:json格式:
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 3
}
}
- settings:索引库的设置
- number_of_shards:分片数量
- number_of_replicas:副本数量
响应结果说明:
_index:文档所在的索引名
_type:文档所在的类型名
_id:文档ID
_version:文档的版本
result:created已经创建
_shards: _shards表示索引操作的复制过程的信息。
total:指示应在其上执行索引操作的分片副本(主分片和副本分片)的数量。
successful:表示索引操作成功的分片副本数。
failed:在副本分片上索引操作失败的情况下包含复制相关错误。
2.2 测试
2.2.1 使用postman 工具测试
2.2.2 使用Kibana 创建
省去Elasticsearch 服务地址,还有语法提示
2.3 映射配置(建表)
什么是映射?
映射是定义文档的过程,文档包含哪些字段,这些字段是否保存,是否索引,是否分词等
只有配置清楚,Elasticsearch才会帮我们进行索引库的创建(不一定)
2.3.1 语法
- 类型名称:就是前面将的type的概念,类似于数据库中的不同表
字段名:任意填写 ,可以指定许多属性,例如: type:类型,可以是text、long、short、date、integer、object等从ES 7.0.0 开始,Type就被移除- index:是否索引,默认为true
- store:是否存储,默认为false
- analyzer:分词器,这里的
ik_max_word
或ik_smart
即使用ik分词器
PUT /goods
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 2
}
, "mappings": {
"properties": {
"title":{
"type": "text",
"analyzer": "ik_max_word"
},
"images":{
"type": "keyword",
"index": false
},
"price":{
"type": "float",
"index": false
}
}
}
}
问题,illegal_argument_exception
原因:从ES 7.0.0 开始,Type就被移除
2.4 CRUD
2.4.1 新增一条数据
- 指定文档id
路径格式为 http://<ip>:<port>/<索引>/_doc/<文档ID>
,下面我们插入了一条 ID 为 1 的数据
PUT /goods/_doc/1
{
"title":"华为手机",
"images":"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1588932565199&di=f43a3fa38dfdceddf87ea0ccd479c5d2&imgtype=0&src=http%3A%2F%2F02.imgmini.eastday.com%2Fmobile%2F20170814%2F4168406f90d09a5495c5c85dbde700bd.jpeg",
"price":1499.99
}
- 自动生成id
格式: POST /goods/_doc/
POST /goods/_doc/
{
"title":"小米手机",
"images":"https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/space/pic/item/38dbb6fd5266d016629ec873982bd40734fa35e1.jpg",
"price":1699.99
}
2.4.2 查询
-
简单查询
GET /indices索引/_doc/_id值
-
条件查询
POST /indices索引/_search
-
聚合查询
GET /goods/_doc/1
查询所有
查询所有,排序、限制(从哪里返回、返回多少条)
关键字 查询
2.4.3 更新
格式:/indices索引/_update/_id值
POST /goods/_update/zEM283EBE4B9a-qryeU9
{
"doc": {
"title":"小米10青春版"
}
}
2.4.4 删除
- 文档删除
DELETE /indices索引/_doc/_id值
- 索引删除 DELETE /indices索引