能连上不代表能查,需用rest client发get/post验证http层连通性;常见401(缺认证头)、406(漏content-type)、400(json格式错);索引名须全小写、数字、连字符,禁大写/下划线开头。

用 REST Client 发 GET/POST 验证集群连通性
能连上不代表能查,先确认基础 HTTP 层通不通。REST Client 是最轻量、最可控的起点,不依赖插件状态或语言模式。
常见错误现象:401 Unauthorized(没带认证头)、406 Not Acceptable(漏了 Content-Type: application/json)、400 Bad Request(JSON 格式错,比如末尾多逗号、单引号代替双引号)。
- 新建
es-test.http文件,写入:GET http://localhost:9200/_cluster/health?pretty Authorization: Basic ZWxhc3RpYzpjaGFuZ2VtZQ==
- 光标停在该行,按
Ctrl+Alt+R(Windows/Linux)或Cmd+Alt+R(macOS),右侧立刻出响应 - 发 POST 请求时,必须空一行再写 JSON body,并显式加
Content-Type: application/json头 - URL 含中文或空格?得自己
encodeURIComponent(),REST Client 不自动编码
用 Elasticsearch for VSCode 插件执行 .es 文件查询
它不是浏览器,也不维持会话——每次执行都是独立 HTTP 请求,靠 URL 或配置文件传认证信息。
使用场景:日常写 DSL 查询、反复调试聚合逻辑、配合 .esenv 切换环境。
- 文件后缀为
.es,语言模式设为Elasticsearch(Ctrl+K→m→ 输入elasticsearch) - 连接配置走命令面板:
Ctrl+Shift+P→ 输入Elasticsearch: Set Host→ 填完整 URL,如http://elastic:changeme@localhost:9200 - HTTPS + 自签名证书?必须在
settings.json加"elasticsearch.allowInsecureCertificates": true - 执行时选中整段语句(含方法、路径、body),按
Alt+Enter(Windows/Linux)或Ctrl+Enter(macOS)
索引名和字段名大小写与命名规则陷阱
Elasticsearch 7+ 对索引名有硬性限制,不是“建议”,是直接 400 Bad Request 拒绝创建。
容易踩的坑:本地开发用 MyIndex 能过,一上测试环境就报错;或字段名用 user_name 写进 mapping,但查询时拼成 userName 导致无结果。
- 索引名不能以大写字母、下划线
_或连字符-开头,例如MyIndex、_myindex、-logs全部非法 - 索引名只能含小写字母、数字、连字符,且不能以连字符结尾(
logs-2024-05✅,logs-❌) - 字段名默认区分大小写,
title和Title是两个字段;别依赖“自动转小写”这种不存在的行为 - 查询时若用
match_phrase或term,值也需严格匹配大小写和空格("Elastic Search"≠"elastic search")
跨环境变量管理:别把密码写死在 .http 或 .es 文件里
硬编码 http://elastic:mypass@prod-es.example.com:9200 是最常见也最危险的操作——一次误提交就泄露凭证。
正确做法是用变量 + 环境隔离,但要注意变量解析时机和 Base64 编码要求。
- 在
.http文件顶部加变量块:@host = http://localhost:9200 @auth = Basic ZWxhc3RpYzpjaGFuZ2VtZQ==
- 请求中引用:
GET {{host}}/_cat/indices?v Authorization: {{auth}} -
@auth的值必须是username:password的 Base64 编码结果(不是明文),可用echo -n 'elastic:changeme' | base64生成 - 敏感值改用环境变量:
@token = {{env:ES_PASSWORD}},启动 VSCode 前在终端执行export ES_PASSWORD=xxx
401,排查时容易绕远。











