Openblocks 连接 Elasticsearch 数据源:配置指南与底层实现解析
低代码后端前端开发工具【免费下载链接】openblocks The Open Source Retool Alternative项目地址https://gitcode.com/gh_mirrors/op/openblocks点击查看免费下载Elasticsearch 是面向海量数据的高扩展性分布式搜索与分析引擎Openblocks 将其作为原生数据源类型内置支持。本文以官方文档 connect-to-databases/elasticsearch.md 为核心骨架完整还原从「获取连接参数」到「创建数据源、测试连接并保存」的完整操作流程同时结合仓库中客户端表单组件与 Java 服务端插件源码深入讲解连接串格式、鉴权方式、查询编辑器的使用与底层执行原理帮助你不仅会配置更知其所以然。前置条件在创建 Elasticsearch 数据源之前需要完成两项准备工作1. 获取数据库连接参数向数据库所有者或你的 Elasticsearch 集群管理员索取以下连接信息连接地址hostElasticsearch 集群的 HTTP 服务地址端口port默认9200具体以集群配置为准数据库名称Elasticsearch 中通常以索引index维度组织数据此处指你将要访问的目标索引名用户名与密码如果集群开启了 Basic Authentication 安全认证需要提供具备相应权限的账号。2. 配置 IP 白名单如果你的数据源如云厂商托管的 Elasticsearch配置了防火墙规则必须在连接前将 Openblocks 的 IP 地址加入白名单否则连接与查询都会失败。参考官方文档 configure-ip-allowlists.md需要放行的 IP 为54.149.191.117 54.71.67.239自建部署场景下则需将 Openblocks 服务实例所在服务器的出口 IP 加入集群的网络访问控制列表。创建 Elasticsearch 数据源创建数据源的操作权限仅限工作区管理员与开发者两种角色。Openblocks 提供了两条入口路径方式一从数据源中心创建导航到 Openblocks 首页的Data Sources标签页点击New data source按钮。方式二从应用编辑器内创建在应用编辑器中新建查询时点击 New下拉菜单选择 New data source同样可以进入数据源创建流程。进入创建向导后按照以下步骤操作选择数据源类型DatabaseElasticsearch设置数据源名称并填写通用设置General Settings可选点击Test connection校验连接是否成功点击Save保存数据源将存入你的数据源库之后即可在任意应用的查询编辑器中选用。从源码看Elasticsearch 表单在客户端注册为es类型并标记为白名单数据源whitelist: true见 datasourceFormRegistry.tsx对应的表单组件实现位于 esDatasourceForm.tsx。连接串Connection String格式详解与 MySQL、PostgreSQL 等采用「分字段填写 host / port / database」的 SQL 数据源不同Openblocks 的 Elasticsearch 数据源表单将连接信息统一收敛为一个connectionString输入框其占位示例为https://username:passwordmy-elasticsearch.com:8082连接串的解析规则服务端由 EsConnector.java 负责解析连接串解析逻辑位于parseConnectionString方法规则如下协议schema连接串中://之前的部分作为协议缺省时默认http主机与端口://之后、/之前的部分按host:port拆分端口缺省时为-1此时客户端将使用默认端口并在请求头中显式覆写Host头规避 Elasticsearch 对 80/443 主机返回 no such host 的已知问题对应 elastic/elasticsearch#71026路径前缀prefix/之后的全部路径段会被拼接为路径前缀通过RestClientBuilder.setPathPrefix设置可用于对接位于反向代理或子路径之下的集群如/es/。客户端配置接口EsConfig同样印证了这一点字段为connectionString、username、password、skipTls见 datasourceApi.ts。鉴权配置用户名与密码为可选字段表单组件通过UserNameFormInputItem与PasswordFormInputItem收集见 esDatasourceForm.tsx。服务端在buildRestClient中只有当用户名与密码同时非空时才启用 Basic 认证if (StringUtils.isNotBlank(esDatasourceConfig.getUsername()) StringUtils.isNotBlank(esDatasourceConfig.getPassword())) { UsernamePasswordCredentials credentials new UsernamePasswordCredentials(esDatasourceConfig.getUsername(), esDatasourceConfig.getPassword()); CredentialsProvider provider new BasicCredentialsProvider(); provider.setCredentials(AuthScope.ANY, credentials); restClientBuilder.setHttpClientConfigCallback( builder - builder.setDefaultCredentialsProvider(provider)); }密码在存储层会经过加密处理EsDatasourceConfig实现了doEncrypt/doDecrypt且密码字段标记了JsonView(JsonViews.Internal.class)避免在序列化时对外暴露见 EsDatasourceConfig.java。安全校验服务端在建立连接前会执行两层校验配置合法性validateConfig要求连接串非空否则返回CONNECTION_STRING_EMPTY主机黑名单buildRestClient会检查解析出的 host 是否命中commonConfig.getDisallowedHosts()中的禁用地址用于防止 SSRF 攻击命中即抛出INVALID_CONNECTION_STRING异常。测试连接的工作原理点击Test connection时服务端testConnection方法会真实建立一次连接并向 Elasticsearch 发送一个HEAD /请求对应 EsConnector.java响应状态码为200→ 返回DatasourceTestResult.testSuccess()其他状态码或异常 → 返回失败原因并在日志中记录。整个校验过程带有超时控制默认超时时间为datasourceValidateTimeoutMillis默认 6000ms。在查询编辑器中编写 Elasticsearch 查询数据源保存成功后在应用编辑器中新建查询并选择该数据源即可看到专为 Elasticsearch 设计的查询配置面板其前端实现为 esQuery.tsx。查询方式EsMethod面板顶部提供查询方式下拉框共 6 种模式见 esQuery.tsx模式内置 API 模板说明Raw command无完全自由编写 HTTP 方法与路径、Body适合任意 ES REST APISearchGET target/_search检索数据CreatePUT/POST target/_doc、PUT target/_doc/_id、PUT/POST target/_create/_id创建文档UpdatePOST index/_update/_id更新文档DeleteDELETE index/_doc/_id删除文档GetGET/HEAD index/_doc/_id、GET/HEAD index/_source/_id获取单条文档每种查询方式预置了对应的 REST API 模板HTTP 方法与路径组合切换方式时面板会自动填入推荐的 HTTP 方法与路径。查询面板右上角提供View Elasticsearch API documents按钮一键跳转官方 REST API 文档对应 tutorialUtils.ts 中配置的文档地址。URL 的组装查询配置面板将 URL 拆解为四段拼接规则为[connectionString] / prefix / path / suffixconnectionString只读展示数据源的连接串prefix目标索引或target占位例如my-indexpathAPI 路径如_search、_doc、_update在 RAW 模式下可自由编辑suffix文档 ID 等后缀如_id。服务端 EsQueryExecutor.java 会把 prefix / path / suffix 三段拼接后过滤多余/得到最终请求路径。Body 中的 DSL 与模板变量Body 区域用于填写 Elasticsearch Query DSLJSON 格式。DSL 支持Mustache 模板语法服务端通过MustacheHelper.renderMustacheString/renderMustacheJsonString将{{ }}中的内容渲染为查询参数的实际值EsQueryExecutor.buildQueryExecutionContext因此你可以这样编写动态查询{ query: { match: { name: {{searchInput}} } } }其中{{searchInput}}会在运行时被替换为应用组件searchInput的当前值实现参数化查询。prefix、path、suffix 三段同样支持 Mustache 渲染。HTTP 方法在 RAW 模式下可手动选择 HTTP 方法支持GET、POST、PUT、DELETE、HEAD五种。写入操作的保护EsQuery.isWrite方法会将CREATE、UPDATE、DELETE、RAW模式判定为写入类查询见 esQuery.tsx写入类查询在应用权限体系中会受到更严格的管控避免误操作污染线上数据。服务端执行链路查询从前端提交后在服务端按如下链路执行构建执行上下文EsQueryExecutor.buildQueryExecutionContext将前端提交的查询配置反序列化为EsQueryConfig字段esMethod、prefix、suffix、path、httpMethod、dsl渲染 Mustache 变量后组装出最终path与dsl见 EsQueryConfig.java 与 EsQueryExecutionContext.java发起请求基于org.elasticsearch.client.RestClientLow Level REST Client版本 8.2.3见 pom.xml构造Request若 DSL 非空则通过request.setJsonEntity(dsl)设置请求体异步适配ReactorRestClientAdaptor.java 将 RestClient 的异步回调ResponseListener适配为 ReactorMono保持 Openblocks 服务端全链路响应式非阻塞响应解析将响应体按 JSON 解析为Map包装为QueryExecutionResult.success(map)返回给前端前端即可直接在表格、文本等组件中绑定使用超时或请求异常则返回EXECUTION_TIMEOUT/ES_QUERY_ERROR等错误信息对应错误文案见 locale_en.properties 中的ES_EXECUTION_ERROR。此外EsConnector的连接对象存放在ClientBasedConnectionPool连接池中复用连接元数据在 DatasourceMetaInfoServiceImpl.java 中注册类型为es、显示名Elasticsearch、插件执行器键es-plugin且hasStructureInfo(false)—— 即 Elasticsearch 数据源不提供表结构预览因为 ES 的数据组织是索引而非关系表。常见问题与排查建议连接超时检查 Openblocks 出口 IP 是否已加入白名单configure-ip-allowlists.md以及连接串中协议http/https与端口是否与集群实际配置一致no such host 错误当使用 80/443 默认端口时客户端会主动覆写Host请求头以规避该已知问题若仍出现请确认集群是否位于代理之后并在连接串中显式填写实际端口认证失败确认用户名与密码均已在数据源表单中填写两者同时非空才会启用 Basic 认证且账号具备目标索引的访问权限查询报错可在查询编辑器中切换到Raw command模式直接调试 REST 路径与 DSL并结合右上角官方 API 文档核对请求格式。结语通过本文你可以完成 Openblocks 与 Elasticsearch 数据源的完整对接从获取连接参数、配置 IP 白名单到按连接串格式创建数据源、测试连接再到在查询编辑器中以模板化 DSL 编写检索与写入查询。同时透过 esDatasourceForm.tsx、esQuery.tsx 与 elasticSearchPlugin 插件源码你也理解了连接串解析、Basic 鉴权、Mustache 参数渲染与响应式请求适配等底层机制为后续排查与二次开发打下了基础。赞分享低代码后端前端开发工具【免费下载链接】openblocks The Open Source Retool Alternative项目地址https://gitcode.com/gh_mirrors/op/openblocks点击查看免费下载相关推荐Apache DolphinScheduler 数据源接入指南DB2 连接配置与底层实现解析Apache DolphinScheduler 数据源接入指南DB2 连接配置与底层实现解析 Apache DolphinScheduler 内置了对 DB2任务调度大数据后端前端Vorssaint 入门指南一个免费的 macOS 菜单栏工具装下十几个常用小工具Vorssaint 入门指南一个免费的 macOS 菜单栏工具装下十几个常用小工具 打开 Mac 想查个网速、调个音量、截个图却发现要分别在两三个小应用里桌面应用res-downloader 插件规范拆解4 个方法 1 个桥如何接住任意新平台res downloader 插件规范拆解4 个方法 1 个桥如何接住任意新平台 res downloader 是一个 Go Wails 的跨平台资源桌面应用网络音视频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考