API
请求方法:<verb>
请求地址:<Protocol>
: //<Host>
:<Port>
/<Path>
?<Query_String>
请求体:<Body>
约 1202 字大约 4 分钟
2025-04-30
Elasticsearch
采用 Rest 风格 API,因此其 API 就是一次 http 请求,你可以用任何工具发起 http 请求。
API
请求方法:<verb>
请求地址:<Protocol>
: //<Host>
:<Port>
/<Path>
?<Query_String>
请求体:<Body>
参数 | 解释 |
---|---|
VERB | 适当的HTTP方法或者谓词:GET 、POST 、PUT 、HEAD 或者DELETE |
PROTOCOL | http 或者https (如果你在 ElasticSearch 前面有一个 Https 代理) |
HOST | ElasticSearch 集群中任一节点的主机名,或者 localhost 代表本地机器上的节点 |
PORT | 运行 ElasticSearch HTTP 服务的端口号,默认是 9200 |
PATH | Path API 的终端路径 (例如_count将返回集群中文档数量) Path 可能包含多个组件例如:_cluster/stats 和 _nodes/stats/jvm |
QUERY_STRING | 任意可选的查询字符串参数(例如: ?pretty 将格式化的输出Json 返回值) |
BODY | JSON 格式的请求体(如果需要的话) |
提示
mapping是对索引库中文档的约束。 索引库就类似数据库表,mapping映射就类似表的结构。
常见的mapping属性包括:
操作 | 方法 |
---|---|
创建索引库 | PUT /库名 |
查询索引库 | GET /库名 |
删除索引库 | DELETE /库名 |
修改(添加)索引库 | PUT /库名/_mapping |
📢 基本语法:
PUT /索引库名称
{
"mappings": {
"properties": {
"字段名":{
"type": "text",
"analyzer": "ik_smart"
},
"字段名2":{
"type": "keyword",
"index": "false"
},
"字段名3":{
"properties": {
"子字段": {
"type": "keyword"
}
}
},
// ...略
}
}
}
put /blog1
{
"mappings" : {
"properties" : {
"content" : {
"analyzer" : "standard",
"index" : "analyzed",
"store" : true,
"type" : "text"
},
"id" : {
"index" : "not_analyzed",
"store" : true,
"type" : "long"
},
"title" : {
"analyzer" : "standard",
"index" : "analyzed",
"store" : true,
"type" : "text"
}
}
}
}
📢 基本语法:
GET /索引库名
get /blog1
倒排索引结构虽然不复杂,但是 一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库一旦创建,无法修改mapping。
虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。
📢 基本语法:
PUT /索引库名/_mapping
{
"properties": {
"新字段名":{
"type": "integer"
}
}
}
{
"properties": {
"time":{
"type": "date"
}
}
}
📢 基本语法:
DELETE /索引库名
DELETE /blog1
操作 | 方法 |
---|---|
创建文档 | POST /索引库名/_doc/文档 id |
查询文档 | GET /索引库名/_doc/文档 id |
删除文档 | DELETE /索引库名/_doc/文档 id |
修改文档-全量 | PUT /索引库名/_doc/文档 id |
修改文档-增量 | PUT POST /索引库名/_update/文档 id {"doc": {字段}} |
📢 基本语法:
POST /索引库名/_doc/文档id
{
"字段1": "值1",
"字段2": "值2",
"字段3": {
"子属性1": "值3",
"子属性2": "值4"
},
// ...
}
POST /blog1/_doc/1
{
"id": "48634876221",
"title": "新博客上线",
"content": "我的新博客上线了!地址是:https://liangxinglong-sudo.github.io/,欢迎大家踊跃访问~"
}
根据 rest 风格,新增是 post,查询应该是 get,不过查询一般都需要条件,这里我们把文档 id 带上。
📢 基本语法:
GET /{索引库名称}/_doc/{id}
//批量查询:查询该索引库下的全部文档
GET /{索引库名称}/_search
GET /blog1/_doc/1
删除使用DELETE请求,同样,需要根据id进行删除:
📢 基本语法:
DELETE /{索引库名}/_doc/id值
# 根据id删除数据
DELETE /heima/_doc/1
修改有两种方式:
1.4.1 全量修改 全量修改是覆盖原来的文档,其本质是:
根据指定的id删除文档 新增一个相同id的文档 注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。