请求转换器
用 Dev Console 语法将 Elasticsearch 请求转换成其他格式的库.
试试看 这里。 。 。 .
安装
npm install @elastic/request-converter
使用量
import { convertRequests } from "@elastic/request-converter";
const devConsoleScript = `GET /my-index-000001/_search?from=40&size=20
{
"query": {
"term": {
"user.id": "kimchy"
}
}
}`
async function main() {
const code = await convertRequests(devConsoleScript, "python", {
checkOnly: false,
printResponse: true,
complete: true,
elasticsearchUrl: "http://localhost:9200",
});
console.log(code);
}
main();
第二个参数中可以传递的现有格式列表可以是: 所得情况如下:
import { listFormats } from "@elastic/request-converter";
const formats = listFormats();
上面的例子中的自动代码会是这样的:
import os
from elasticsearch import Elasticsearch
client = Elasticsearch(
hosts=["http://localhost:9200"],
api_key=os.getenv("ELASTIC_API_KEY"),
)
resp = client.search(
index="my-index-000001",
from_="40",
size="20",
query={
"term": {
"user.id": "kimchy"
}
},
)
当使用节点和 JavaScript 时, 您可以导入此库中的函数为 如下:
const { convertRequests, listFormats } = require("@elastic/request-converter");
可用格式
此时转换器支持 curl, (中文(简体) ), python, (中文(简体) ), javascript, (中文(简体) ), php, (中文(简体) ), ruby 财务报告和审定财务报表 csharp。目前正在开展工作
正在取得进展,以增加对更多语言的支持.
卷曲
卷轴导出者使用 卷曲 命令行 HTTP 客户端.
支持的选项 :
| 选项名称 | 类型 | 需求 | 说明 |
|---|---|---|---|
elasticsearchUrl | string | 没有 | 在生成的命令中使用的弹性搜索端点 。 默认是 http://localhost:9200。 。 。 . |
otherUrls | Record<string, string> | 没有 | 其他服务的URL. 基巴纳,使用 {kbn: "http://localhost:5601"} |
windows | boolean | 没有 | 若为 true,使用PowerShell 逃避规则引用。 若为 false用击打/zsh逃出规则。 默认是 false。 。 。 . |
蟒蛇
Python导出器为Elasticsearch Python客户端生成代码.
支持的选项 :
| 选项名称 | 类型 | 需求 | 说明 |
|---|---|---|---|
printResponse | boolean | 没有 | 若为 true,在打印响应时添加代码。 默认是 false。 。 。 . |
complete | boolean | 没有 | 若为 true,生成完整的脚本。 若为 false,只生成请求代码。 默认是 false。 。 。 . |
elasticsearchUrl | string | 没有 | 要使用的弹性搜索端点 。 默认是 http://localhost:9200。 。 。 . |
日记
JavaScript出口商为Elasticsearch JavaScript客户端生成代码.
支持的选项 :
| 选项名称 | 类型 | 需求 | 说明 |
|---|---|---|---|
printResponse | boolean | 没有 | 若为 true,在打印响应时添加代码。 默认是 false。 。 。 . |
complete | boolean | 没有 | 若为 true,生成完整的脚本。 若为 false,只生成请求代码。 默认是 false。 。 。 . |
elasticsearchUrl | string | 没有 | 在生成的命令中使用的弹性搜索端点 。 默认是 http://localhost:9200。 。 。 . |
密码
PHP导出者为Elasticsearch PHP客户端生成代码.
支持的选项 :
| 选项名称 | 类型 | 需求 | 说明 |
|---|---|---|---|
printResponse | boolean | 没有 | 若为 true,在打印响应时添加代码。 默认是 false。 。 。 . |
complete | boolean | 没有 | 若为 true,生成完整的脚本。 若为 false,只生成请求代码。 默认是 false。 。 。 . |
elasticsearchUrl | string | 没有 | 要使用的弹性搜索端点 。 默认是 http://localhost:9200。 。 。 . |
红宝石
Ruby出口商为Elasticsearch Ruby客户端生成代码.
支持的选项 :
| 选项名称 | 类型 | 需求 | 说明 |
|---|---|---|---|
printResponse | boolean | 没有 | 若为 true,在打印响应时添加代码。 默认是 false。 。 。 . |
complete | boolean | 没有 | 若为 true,生成完整的脚本。 若为 false,只生成请求代码。 默认是 false。 。 。 . |
elasticsearchUrl | string | 没有 | 要使用的弹性搜索端点 。 默认是 http://localhost:9200。 。 。 . |
摇摆
C#出口商为Elasticsearch.NET客户端生成代码. 与
其他输出者, 代码生成运行在已发送的. NET WASM 捆绑内
单独作为 @elastic/request-converter-dotnet 自.NET以来的软件包
javaScript 中没有客户端的代码模型. 安装在此旁边
软件包,选择与目标匹配的主要.minor版本
弹性搜索版本 :
npm install @elastic/request-converter-dotnet
使用本地制作的捆绑取而代之(例如开发
捆绑自己,设置 CSHARP_REQUEST_CONVERTER_BUNDLE 环境
变量到其切入点的路径,然后运行转换器.
支持选项( snake case, 匹配. NET 捆绑的电线合同) :
| 选项名称 | 类型 | 需求 | 说明 |
|---|---|---|---|
syntax_mode | string | 没有 | "descriptor" 用于流利描述链,或 "object_initializer" 用于对象初始化。 默认是 "descriptor"。 。 。 . |
use_strongly_typed_document | boolean | 没有 | 若为 true,字段存取器在示例文档类型上使用羊肉。 默认是 true。 。 。 . |
document_type_name | string | 没有 | 生成代码中使用的文档类型名称 。 默认是 "MyDocument"。 。 。 . |
type_name_style | string | 没有 | "Simplified", (中文(简体) ), "Fqn",或 "GlobalFqn" 类型名称渲染。 默认是 "Simplified"。 。 。 . |
debug | boolean | 没有 | 若为 true,将转换器诊断器附加到错误消息中。 默认是 false。 。 。 . |
命令线接口
为了方便,一个CLI包起 convertRequests 函数也可用.
$ echo GET / > request.txt
$ node_modules/.bin/es-request-converter --format python --complete < request.txt
import os
from elasticsearch import Elasticsearch
client = Elasticsearch(
hosts=[os.getenv("ELASTICSEARCH_URL")],
api_key=os.getenv("ELASTIC_API_KEY"),
)
resp = client.info()
使用自定义导出器
您可不通过可用的出口商之一的名称,而是通过 海关出口商实例.
要定义自定义导出格式,请创建执行该格式的类
FormatExporter 接口。 以下是输出名称的出口商示例
请求中使用的API:
import { FormatExporter, convertRequests } from "@elastic/request-converter";
class MyExporter implements FormatExporter {
async check(requests: ParsedRequest[]): Promise<boolean> { return true; }
async convert(requests: ParsedRequest[], options: ConvertOptions): Promise<string> {
return requests.map(req => req.api).join("\n");
}
}
const apis = await convertRequests("GET /my-index/_search\nGET /\n", new MyExporter(), {});
console.log(apis); // outputs "search\ninfo"
发展
本节介绍日常开发任务.
弹性搜索规格更新
要刷新规格 schema.json 文件,切换到想要的分支(例如:. 9.5)然后运行命令:
npm run update-schema
单位测试
要进行所有单位测试,请使用:
npm run test
要启动一个在源文件更改时自动执行测试的监视器进程, 请使用 :
npm run watch:test
融合测试
集成测试通过转换过程运行存储在schema.json文件中的例子,执行生成的代码,捕捉生成的代码问题的请求,并与初始实例进行比较,由于每个语言客户端解释请求的方式不同,因此有一定的灵活性. 这是一个相当复杂的过程,对大多数但并非所有的例子都行之有效。 已知失败的例子可见于 tests/integration/skip.ts 文档.
整个集成测试套件每周二在协调世界时2:00在GitHub Actions预定的工作流程中运行. 也可以引发来自 工作流程页面目前全程需要约5分钟,所有语言都平行运行。 由语言向后跑的本地跑步预计需要15-20分钟才能完成.
为了在当地进行集成测试,首先安装所有支持语言所需的依赖性:
npm run test:setup
设置命令还针对每种语言分别提供:
npm run test:setup-curl
npm run test:setup-python
npm run test:setup-ruby
npm run test:setup-javascript
npm run test:setup-php
对所有语言进行综合测试:
npm run test:integration
或针对每种语言分别:
npm run test:integration-curl
npm run test:integration-python
npm run test:integration-ruby
npm run test:integration-javascript
npm run test:integration-php
还有可能对所有可用的语言进行单一测试:
npm run test:example CountRequestExample1
线性
运行线圈:
npm run lint
npm run prettier
要自动解决 linters 发现的问题 :
npm run fix
大楼
为了在当地建立图书馆:
npm run build
删除所有构建文件 :
npm run clean
为建立文件:
npm run docs
释放
要准备释放承诺,切换到目标分支(例如. 9.5)并运行:
npm run release
这个脚本在某些情况下可以拒绝运行 :
- 如果规格是
schema.json文件未更新 - 如果目前的分行不是可再放行的分行(例如.
main(中文(简体) ) - 如果当前分支有未承诺的更改
在这些情况下,剧本会说明问题所在以及如何解决这个问题.
如果一切看起来都很好,脚本会提出一个版本编号,可以接受或更改. 然后打开您的默认文本编辑器( 设置在 $EDITOR)和生成的可按需要编辑的发布注释. 一旦退出编辑器,将显示用于发布修改的 diff 。 新闻 ENTER 生成释放承诺或 Ctrl-C 以中止.
因此,释放承诺需要被推入上游存储库:
git push --tags origin $BRANCH
最后,GitHub Actions上有"Publish package to npm"的工作流程,需要开始将发行推向npm.