mcpField
M
MCP Server: Elasticsearch semantic search tool

MCP Server: Elasticsearch semantic search tool

本地服务
j.blaszyk.me记忆与知识385 周前更新

关于 MCP Server: Elasticsearch semantic search tool

这是一个 Python MCP 服务,可对索引在 Elasticsearch 中的 Search Labs 博客文章进行语义搜索。适用于已将文章抓取到指定索引的用户,并使用 Elasticsearch 的 ELSER 模型进行语义索引。

主要功能

  1. 01博客文章语义搜索
  2. 02支持 Elasticsearch 索引
  3. 03ELSER 语义索引
  4. 04Elastic Open Crawler 配置

适用场景

  1. 01查找相关的 Search Labs 文章
  2. 02按含义搜索已抓取的文章

MCP 相关

向 MCP 客户端提供语义搜索工具,用于查询存储在 Elasticsearch 中的 Search Labs 博客文章。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"elastic-semantic-search": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"\\"
]
}
}
}
启动命令docker run -i --rm '\'

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
oci\

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP 服务:Elasticsearch 语义搜索工具

演示仓库:https://j.blaszyk.me/tech-blog/mcp-server-elasticsearch-semantic-search/

目录


概述

此仓库提供了一个用于在 Elasticsearch 中对已索引的 Search Labs 博文进行语义搜索的 MCP 服务 Python 实现。

本示例假设你已使用 Elastic Open Crawler 爬取博文,并将其存储在 search-labs-posts 索引中。


运行 MCP 服务

将 ES_URL 和 ES_AP_KEY 添加到 .env 文件中(如何生成具有最低权限的 API 密钥,请参阅此处)。

在 MCP Inspector 中启动服务:

make dev

服务运行后,访问 MCP Inspector:http://localhost:5173


与 Claude Desktop 集成

要将 MCP 服务添加到 Claude Desktop:

make install-claude-config

这会更新主目录中的 claude_desktop_config.json。下次重启时,Claude 应用会检测到该服务并加载已声明的工具。


爬取 Search Labs 博文

1. 验证爬虫设置

要检查 Elastic Open Crawler 是否正常工作,请运行:

docker run --rm \
  --entrypoint /bin/bash \
  -v "$(pwd)/crawler-config:/app/config" \
  --network host \
  docker.elastic.co/integrations/crawler:latest \
  -c "bin/crawler crawl config/test-crawler.yml"

这应该会打印出单个页面中爬取的内容。


2. 配置 Elasticsearch

设置 Elasticsearch URL 和 API Key。

生成具有最低爬虫权限的 API 密钥:

POST /_security/api_key
{
  "name": "crawler-search-labs",
  "role_descriptors": {
    "crawler-search-labs-role": {
      "cluster": ["monitor"],
      "indices": [
        {
          "names": ["search-labs-posts"],
          "privileges": ["all"]
        }
      ]
    }
  },
  "metadata": {
    "application": "crawler"
  }
}

从响应中复制 encoded 值,并将其设置为 API_KEY。


3. 更新索引映射以支持语义搜索

确保 search-labs-posts 索引已存在。如果不存在,请创建:

PUT search-labs-posts

更新映射以启用语义搜索:

PUT search-labs-posts/_mappings
{
  "properties": {
    "body": {
      "type": "text",
      "copy_to": "semantic_body"
    },
    "semantic_body": {
      "type": "semantic_text",
      "inference_id": ".elser-2-elasticsearch"
    }
  }
}

body 字段使用 Elasticsearch 的 ELSER 模型作为语义文本进行索引。


4. 开始爬取

运行爬虫以填充索引:

docker run --rm \
  --entrypoint /bin/bash \
  -v "$(pwd)/crawler-config:/app/config" \
  --network host \
  docker.elastic.co/integrations/crawler:latest \
  -c "bin/crawler crawl config/elastic-search-labs-crawler.yml"

提示

如果使用全新的 Elasticsearch 集群,请等待 ELSER 模型启动后再进行索引。


5. 验证已索引的文档

检查文档是否已编入索引:

GET search-labs-posts/_count

这会返回索引中的文档总数。你也可以在 Kibana 中验证。


完成! 现在你可以对 Search Labs 博文执行语义搜索。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。