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 에서 서버를 시작합니다.
지엑스피1
실행 후 MCP Inspector에 접속하세요: http://localhost:5173
Claude Desktop과 통합
Claude Desktop 에 MCP 서버를 추가하려면:
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"이렇게 하면 단일 페이지 에서 크롤링된 콘텐츠가 인쇄됩니다.
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 블로그 게시물 에서 의미 검색을 수행할 수 있습니다.