Skip to content

使用 DeepSeek 和 OpenAI 等大模型来生成 Elasticsearch 查询

Elasticsearch 在搜索引擎行业被广泛使用,并且性能优异。然而众所周知,即使是有经验的数据库工程师,编写 Elasticsearch 的查询也是一件令人头疼的事。与 SQL 不同,Elasticsearch Query DSL 中有太多术语和保留关键字需要记忆,其查询 的JSON语句通常冗长复杂,而且往往还依赖于你的业务上下文。

如今,随着 AI 大模型技术的普及,它是否能改善或增强我们编写 Elasticsearch DSL 查询的体验呢?

我们都知道,AI 在生成基于文本的内容方面非常擅长,而 Elasticsearch 查询本质上也是一种结构化文本,符合一定的规则。那么我们是否可以直接打开 ChatGPT 来生成这些查询?答案是:也可以,也不可以。

像 ChatGPT 这样的 LLM 产品确实可以帮你生成 Elasticsearch 查询,但这并不意味着它就能满足你的需求。大多数情况下,你无法直接使用 ChatGPT 生成的查询。除了像列出所有索引( GET _cat/indices)这样的简单查询,ChatGPT 生成的查询语句在更多时候都无法直接使用。

为什么呢?因为 ChatGPT 缺少 Elasticsearch 服务的上下文信息。比如你想让 ChatGPT 为你最近使用的某个索引生成查询语句,它至少需要知道索引名称,如果你还要求具体的查询条件,那就还需要提供索引的 mapping。可能会有工程师说:“那没关系啊,我可以自己把 mapping 和索引名都粘贴给 ChatGPT,再加上我用自然语言描述的查询需求。”我也是这么想的,也确实这么尝试过,但很快我就厌倦了不断复制粘贴上下文的过程,最后还是放弃了。于是一切又回到了 ChatGPT 诞生之前的痛苦状态。

那有没有更好的解决方案呢?

答案是:有!今天介绍一款可以显著提升你编写 Elasticsearch 查询体验的工具——DocKit,一个 大模型 加持的 NoSQL 桌面 GUI 客户端。它是开源的,并且跨平台支持 Mac、Windows 和 Linux。

DocKit 支持集成 OpenAI 和 DeepSeek,只需配置你的 API Key。整体架构如下图所示:

DocKit AI assistant 整体架构

以下是它的工作流程:

  1. 当你建立一个连接并打开一个新的编辑器页面时,DocKit 会尝试自动获取目标 Elasticsearch/OpenSearch 的索引和相关 mapping 信息,并将这些 mapping 缓存在内存中供后续使用。
  2. 当你向 AI 助手提出查询生成请求或其他与 Elasticsearch/OpenSearch 相关的问题时,DocKit 会自动将索引名和 mapping 信息注入到对话上下文中,让大语言模型了解查询要针对的索引结构,从而生成更精确的查询语句,比直接去问 LLM 要好得多。
  3. 除非你在对话中明确提供,DocKit 不会发送索引中的实际数据,你的数据依旧安全私密。
  4. 除非你启用了 AI 助手并主动与其交互,否则索引名和 mapping 信息也不会在网络中发送。

让我们试试看!

你可能对这个方案的效果持怀疑态度,那我们用一个示例快速看一下吧!可以使用这份示例数据,也可以直接使用你已有的索引:sample-stocks。运行脚本 ./samples/stocks/ingest.sh,按提示输入你的服务器信息即可快速导入示例数据。

导入后的数据结构如下所示:

json
{
  "mappings": {
    "dynamic": false,
    "properties": {
      "close": { "type": "float" },
      "date": { "type": "date" },
      "high": { "type": "float" },
      "low": { "type": "float" },
      "name": { "type": "keyword" },
      "open": { "type": "float" },
      "volume": { "type": "long" }
    }
  }
}

在你开始向 DocKit 的 AI 助手提问前,需要配置好 API Key。DocKit 当前支持 OpenAI 和 DeepSeek。进入设置页面:Settings -> [OpenAI|DeepSeek] -> 输入模型名称和 API Key -> 点击 Save & Enable,这样你就可以启用 AI 助手功能了!

DocKit AI助手配置

向 DocKit AI 助手发送提问

配置完毕后,打开一个新的连接,在代码编辑器中点击右侧的 AI 图标打开 AI 助手: DocKit AI助手提问界面

在打开的 AI 助手中,输入你的自然语言需求(例如:“返回所有不同股票名称的前 30 个名称”),点击发送按钮,DocKit 会自动将当前索引的上下文与问题一起发送给 AI 助手。

这样你就能获得基于实际上下文的查询语句,整体体验要比自己复制粘贴上下文到 LLM 的方式更高效、更顺畅,DocKit 为你做了这部分的繁重工作。

这只是一个非常基础的示例,我们鼓励你自己去探索更多可能性。我们也在积极扩展更多功能(如 MCP 支持)。如果你感兴趣,欢迎在 DocKit 项目 上提交问题、功能请求,或直接参与贡献!


你是否已经尝试过在项目中引入 AI 工具来简化查询编写? 欢迎交流!

Dockit 是一款开源的 Elasticsearch 和 OpenSearch 图形化客户端,支持 Mac、Windows 和 Linux