Elasticsearch: 데이터베이스와 비즈니스 시스템 전반에서 검색하기

개요

Elasticsearch 소개

Elasticsearch는 텍스트 검색의 업계 표준인 BM25를 시작으로 다양한 검색 기술을 제공합니다. 또한 AI 모델 기반의 시맨틱 검색을 제공하여, 문맥과 의도에 따라 검색 결과를 개선합니다.

이 가이드에서는 외부 데이터베이스의 데이터를 Elasticsearch로 동기화하고, 시맨틱 검색을 사용하여 데이터베이스를 쉽게 검색하는 방법을 알아보겠습니다.


데이터 온보딩

Elastic Cloud 프로젝트 생성

14일 체험판으로 시작하세요. cloud.elastic.co에 접속하여 계정을 생성한 후, 다음 단계를 따라 첫 번째 Elasticsearch Serverless 프로젝트를 시작하세요.

시작하려면 Elasticsearch를 선택합니다.

screenshot-01-which-type-project-like-to-create.png

프로젝트 용도는 General purpose(범용)로 선택합니다. 이름을 'My project'로 지정하고 Create project(프로젝트 생성)를 클릭합니다.

screenshot-02-confirm-project-settings.png

이제 Elasticsearch Serverless 프로젝트가 생성됩니다. 다음으로 첫 번째 Elasticsearch 인덱스를 생성하고 이름을 'my-index'로 지정합니다. Create my index(내 인덱스 생성)를 클릭합니다.

screenshot-03-get-started-elasticsearch.png

다음으로 Elasticsearch에 제3자 데이터 소스를 추가할 수 있습니다. 이 예시에서는 약 150,000개의 비디오 게임 타이틀과 'id', 'name', 'description', 'date' 열이 있는 MongoDB 데이터베이스가 주어집니다. 이 데이터베이스를 Elasticsearch에 동기화하고, 그 후 시맨틱 검색 기능을 추가할 예정입니다.

동일한 필드 이름과 시맨틱 검색을 위한 벡터를 저장할 'description_semantic'을 추가하여 기본 인덱스 매핑을 만들어 보겠습니다. Dev Tools(개발 도구)를 열고 다음 명령을 붙여 넣어 인덱스 매핑을 업데이트합니다.

screenshot-04-console.png

PUT my-index/_mappings
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text",
"copy_to": "description_semantic"
},
"description_semantic": {
"type": "semantic_text"
},
"date": {
"type": "date"
}
}
}


기존 데이터베이스에서 데이터를 가져오기

기존 데이터베이스에 연결할 준비가 되었습니다. Connectors(커넥터)와 + Self-managed connector(자체 관리형 커넥터)를 클릭합니다.

screenshot-05-connectors.png

이 가이드에서는 MongoDB 데이터베이스를 사용합니다. Connector type(커넥터 유형) 목록에서 MongoDB를 선택합니다.

screenshot-06-mongodb-d6b9-link-elasticsearch.png

지침에 따라 Docker를 사용하여 자체 호스팅 커넥터를 배포합니다. config.yml 파일을 만들어야 합니다. connector(커넥터)와 elasticsearch의 api_key는 동일하다는 점에 유의하세요. 그 예는 다음과 같습니다.

connectors:
-
connector_id: KPIDOZUBfX6AM3jXM_g7
service_type: mongodb
api_key: RGZMUU9KVUJmWDZBTTNqWFRQano6R3RRb01jR2kxRkNqWTA5eGtSa3NFZw==
elasticsearch:
host: https://my-project-cc67ad.es.us-east-1.aws.elastic.cloud:443
api_key: RGZMUU9KVUJmWDZBTTNqWFRQano6R3RRb01jR2kxRkNqWTA5eGtSa3NFZw==

그런 다음, 다음을 사용하여 자체 호스팅 커넥터를 시작합니다.

docker run -v "./connectors-config:/config" --tty --rm  docker.elastic.co/enterprise-search/elastic-connectors:8.17.0 /app/bin/elastic-ingest -c /config/config.yml

다음으로, MongoDB 데이터베이스에 구성을 추가하고 Next(다음)를 클릭합니다.

screenshot-07-mongodb-d6b9-configure.png

데이터를 동기화해야 하는 인덱스를 선택합니다. 이 경우 이전에 만든 인덱스인 'my-index'입니다. Sync(동기화)를 클릭합니다.

screenshot-08-mongodb-d6b9-connect-index.png

잘 하셨어요! 커넥터는 데이터베이스를 트래버스하고 문서를 'my-index'에 동기화합니다. 기본 Connectors(커넥터) 페이지에 현재 상태가 표시됩니다.

screenshot-11-mongodb-d6b9-connectors.png

커넥터를 구성하여 데이터베이스를 주기적으로 Elasticsearch에 동기화할 수도 있습니다. 이렇게 하려면 커넥터를 클릭한 다음 Scheduling(예약)을 클릭하고 Every hour(매시간)를 선택한 다음 Save(저장)를 클릭합니다. 이제 자체 호스팅 커넥터가 실행 중인 한, 매 시간 정각에 콘텐츠가 동기화됩니다.

screenshot-10-mongodb-d6b9-scheduling.png


Elasticsearch로 작업하기

데이터 쿼리하기

이제 재미있는 부분이 시작됩니다. Build(빌드) > Dev Tools(개발 도구)로 이동한 후(인덱스 매핑을 업데이트할 때 사용한 동일한 섹션), 다음 쿼리를 실행하면 'name' 및 'description' 필드에서 풀텍스트 검색이 수행됩니다.

GET my-index/_search
{
"query": {
"multi_match": {
"query": "adventure game on a desert island",
"fields": [
"name",
"description"
]
}
}
}

이제 인덱스에 semantic_text 필드가 추가되었으니, 다음과 같이 쿼리할 수 있습니다.

GET my-index/_search
{
"query": {
"semantic": {
"field": "description_semantic",
"query": "game about ghosts in medieval times"
}
}
}

지금까지 외부 데이터베이스에서 Elasticsearch로 데이터를 동기화하고, 추가로 시맨틱 검색을 적용하는 방법을 배웠습니다!


다음 단계

Elastic Cloud에서 Python을 사용해 첫 번째 검색 쿼리를 빌드하는 방법을 배우는 데 시간을 내주셔서 감사합니다. Elastic과 함께 하는 여정을 시작하면서, 환경 전체에 배포할 때 사용자로서 관리해야 하는 운영, 보안, 데이터 구성 요소를 이해해야 합니다.

시작할 준비 되셨나요? Elastic Cloud에서 14일 무료 체험판을 시작해 보거나, Search AI 101에서 15분 실습 학습을 해 보세요.

무료 체험판 시작