news 2026/4/18 12:25:48

curl -X POST “http://localhost:9200/articles/_doc/1“ -H “Content-Type: application/json“ -d ‘{“title

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
curl -X POST “http://localhost:9200/articles/_doc/1“ -H “Content-Type: application/json“ -d ‘{“title

curl -X POST "http://localhost:9200/articles/_doc/1" -H "Content-Type: application/json" -d '{"title": "PHP Guide"}'
向 Elasticsearch(ES),创建或更新 ID 为1的文档
理解其每一部分,是
掌握 ES REST API 与数据模型的核心


一、HTTP 协议层:RESTful 请求结构

部分说明作用
curl命令行 HTTP 客户端发送请求
-X POSTHTTP 方法创建/更新文档(ES 中 POST/PUT 均可)
http://localhost:9200ES 节点地址默认 HTTP 端口
-H "Content-Type: application/json"请求头告知 ES 负载为 JSON
-d '{"title": "PHP Guide"}'请求体文档数据

🔑核心ES 完全遵循 RESTful 规范,所有操作 = HTTP 方法 + 路径 + JSON


二、ES 路径语法:/articles/_doc/1的含义

📂路径分解
说明规则
articles索引名(Index)类似数据库的“表”
_doc文档类型(Type)ES 7+ 固定为_doc(早期支持自定义)
1文档 ID(Document ID)唯一标识(不指定则 ES 自动生成)
⚠️关键细节
  • 索引(Index):
    • 必须小写(ES 强制);
    • 若不存在,ES 会自动创建(动态映射);
  • 文档 ID
    • 指定 ID → 幂等操作(重复请求 = 覆盖);
    • 不指定 ID → 用 POST/articles/_doc,ES 生成 UUID

💡_doc是 ES 7+ 的规范旧版(6.x)。


三、数据格式:JSON 文档的规则

📜文档结构
{"title":"PHP Guide","content":"Learn Elasticsearch","tags":["php","search"],"published":true,"views":100}
  • 字段类型ES 自动推断"PHP Guide"text100long);
  • 嵌套对象支持 JSON 对象/数组
🚫禁止内容
  • 顶层不能有.或空格"user.name"会被视为嵌套字段);
  • 不能包含控制字符(如\x00);

ES 文档 = 无 schema 的 JSON 对象(但可预定义映射)。


4. 幂等性与操作语义

🔁指定 ID 的操作语义
操作首次请求重复请求
PUT /index/_doc/1创建 ID=1 的文档覆盖(更新)
POST /index/_doc/1同 PUT同 PUT

⚠️ES 中 PUT/POST 在指定 ID 时行为一致(官方推荐用 PUT 创建,POST 不指定 ID)。

🌐响应示例
{"_index":"articles","_type":"_doc","_id":"1","_version":1,"result":"created",// 或 "updated""_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
  • resultcreated/updated
  • _version乐观锁版本号(用于并发控制);

五、错误处理:常见失败场景

🚨1. 索引名大写
curl-X POST"http://localhost:9200/Articles/_doc/1"-d'{"title":"Test"}'
  • 错误
    {"error":"invalid_index_name_exception","reason":"Invalid index name [Articles], must be lowercase"}
🚨2. JSON 格式错误
curl-X POST... -d"{'title': 'Test'}"# 单引号非法
  • 错误
    {"error":"json_parse_exception","reason":"Unexpected character (''': ...)"}
🚨3. 内容类型缺失
curl-X POST... -d'{"title":"Test"}'# 无 -H "Content-Type: application/json"
  • 错误
    {"error":"parse_exception","reason":"request body is required"}

六、工程实践:PHP 中的安全等效实现

🧪1. 原生 cURL
<?php$url='http://localhost:9200/articles/_doc/1';$data=['title'=>'PHP Guide'];$ch=curl_init($url);curl_setopt_array($ch,[CURLOPT_CUSTOMREQUEST=>'POST',CURLOPT_POSTFIELDS=>json_encode($data),CURLOPT_HTTPHEADER=>['Content-Type: application/json'],CURLOPT_RETURNTRANSFER=>true]);$response=curl_exec($ch);$result=json_decode($response,true);curl_close($ch);if(isset($result['result'])){echo"文档{$result['result']},ID:{$result['_id']}\n";}
🧪2. 使用官方客户端
<?php$client=ClientBuilder::create()->build();$response=$client->index(['index'=>'articles','id'=>1,'body'=>['title'=>'PHP Guide']]);echo"结果: ".$response['result'];

七、终极心法:ES 是 JSON over HTTP

不要被路径语法迷惑,
而要理解“索引=数据库,文档=行,字段=列”

  • 脆弱操作
    • 手写 cURL 无错误处理 → 静默失败
  • 韧性操作
    • 用官方客户端 + 检查响应
  • 结果
    • 前者是脚本,后者是工程

真正的 ES 能力,
不在“命令多熟”,
而在“协议多透”


八、行动建议:今日 ES 写入验证

## 2025-10-07 ES 写入验证 ### 1. 手动执行 curl - [ ] 验证成功响应(result: created) ### 2. 故意触发错误 - [ ] 大写索引名 → 观察错误 - [ ] 单引号 JSON → 观察错误 ### 3. PHP 实现 - [ ] 用 cURL 和官方客户端各实现一次 ### 4. 检查响应 - [ ] 验证 _version 和 result 字段

完成即掌握 ES 写入核心机制

当你停止复制 curl 命令,
开始理解 HTTP + JSON + 路径语义,
Elasticsearch 就从工具,
变为数据管道基石

这,才是专业工程师的搜索观。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:08:37

嵌入式什么岗位薪资高?

嵌入式哪些岗位&#xff0c;薪资 “最能打”&#xff1f;嵌入式不是 “统一薪资”&#xff0c;不同岗位的薪资差异不小 。下面这几个是目前市场上的 “高薪主力岗”&#xff0c;附应届生 & 3-5 年经验的薪资范围&#xff08;数据来自 2026 年行业招聘平台&#xff09;&…

作者头像 李华
网站建设 2026/4/18 6:29:50

快速原型开发:用defineModel一小时搭建TODO应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用Vue3和defineModel快速开发一个TODO应用原型&#xff0c;要求实现&#xff1a;1.任务添加删除 2.完成状态切换 3.按状态过滤 4.本地存储持久化。代码要求&#xff1a;1.使用单…

作者头像 李华
网站建设 2026/4/18 8:48:18

用AI加速量化交易:Backtrader自动化策略开发指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于Backtrader的量化交易策略生成器。用户可以通过自然语言描述交易逻辑&#xff08;如当5日均线上穿20日均线时买入&#xff0c;跌破时卖出&#xff09;&#xff0c;系统…

作者头像 李华
网站建设 2026/4/18 11:30:53

中文与其他33语种互译新标杆:Hunyuan-MT-7B实测报告

中文与33语种互译新标杆&#xff1a;Hunyuan-MT-7B实测解析 在跨国协作日益频繁的今天&#xff0c;一份合同、一则新闻或一段社交媒体内容&#xff0c;往往需要在几十种语言之间快速流转。然而&#xff0c;真正能兼顾翻译质量、语言广度和部署效率的机器翻译方案却依然稀缺——…

作者头像 李华
网站建设 2026/4/18 11:03:56

15分钟搭建CentOS镜像源健康监测系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个轻量级CentOS镜像源监测工具原型&#xff0c;要求&#xff1a;1. 定时ping检测各镜像源 2. 可视化响应时间图表 3. 异常自动通知(邮件/钉钉) 4. 简易管理界面 5. 支持Dock…

作者头像 李华
网站建设 2026/4/18 8:53:26

Unity实战:用AI快速开发AR购物应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 在快马平台输入&#xff1a;创建一个Unity AR购物应用原型&#xff0c;支持扫描平面放置3D商品模型&#xff0c;实现缩放旋转功能。需要包含ARFoundation基础配置、UI交互界面和简…

作者头像 李华