MCP サーバー: Elasticsearch セマンティック検索ツール
デモリポジトリ: https://j.blaszyk.me/tech-blog/mcp-server-elasticsearch-semantic-search/
目次
Related MCP server: Elasticsearch 7.x MCP Server
概要
このリポジトリは、 ElasticsearchでインデックスされたSearch Labs ブログ投稿を通じてセマンティック検索を行うための MCP サーバーの Python 実装を提供します。
Elastic Open Crawlerを使用してブログ投稿をクロールし、 search-labs-postsインデックスに保存していることを前提としています。
MCPサーバーの実行
ES_URLとES_AP_KEYを.envファイルに追加します (最小限の権限で API キーを生成する方法については、こちらをご覧ください)
MCP Inspectorでサーバーを起動します。
make dev実行したら、次の MCP インスペクターにアクセスします: http://localhost:5173
Claude Desktopとの統合
MCP サーバーをClaude Desktopに追加するには:
make install-claude-configこれにより、ホームディレクトリのclaude_desktop_config.jsonが更新されます。次回の再起動時に、Claude アプリはサーバーを検出し、宣言されたツールを読み込みます。
クロール検索ラボのブログ投稿
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"これにより、クロールされたコンテンツが1 ページから印刷されます。
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"新しい Elasticsearch クラスターを使用する場合は、インデックスを作成する前にELSER モデルが開始するまで待機します。
5. インデックスされたドキュメントを検証する
ドキュメントがインデックスされたかどうかを確認します。
GET search-labs-posts/_countインデックス内のドキュメントの総数が返されます。Kibanaでも確認できます。
完了! Search Labsのブログ投稿でセマンティック検索ができるようになりました