返回市场
弹性语义搜索MCP服务器

弹性语义搜索MCP服务器

作者:jedrazb3 星标更新:2025-03-11

项目介绍

MCP Server: Elasticsearch语义搜索工具

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

目录


概述

此仓库提供了一个通过Elasticsearch索引的Search Labs博客文章进行语义搜索Python实现的MCP服务器

假设您已经爬取了博客文章,并使用Elastic Open Crawler将其存储在search-labs-posts索引中。


运行MCP服务器

.env文件中添加ES_URLES_AP_KEY,(参见此处生成具有最小权限的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密钥

生成一个具有最小爬虫权限的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"

[!TIP] 如果使用的是新的Elasticsearch集群,请在索引之前等待ELSER模型启动。


5. 验证已索引文档

检查文档是否已被索引:

GET search-labs-posts/_count

这将返回索引中的总文档数。您也可以在Kibana中进行验证。


完成!现在您可以对Search Labs博客文章执行语义搜索