728x90
Elasticsearch는 대규모 데이터에서 빠른 검색을 가능하게 해주는 분산 검색 엔진입니다. 이번 포스팅에서는 두 개의 데이터베이스(영화 DB와 배우 DB)를 Elasticsearch에 인덱싱하여, 영화와 배우 정보를 통합적으로 검색하는 방법에 대해 설명하겠습니다.
1. 영화 DB와 배우 DB 구조
가장 먼저, 영화와 배우 정보를 담고 있는 두 개의 데이터베이스가 있습니다.
DB1: 영화 정보
| 영화 ID | 제목 | 장르 | 개봉일 | 출연 배우 목록 (배우 ID들) |
|---------|----------------|------|------------|------------------------|
| 1 | "Inception" | 액션 | 2010-07-16 | [101, 102] |
| 2 | "Titanic" | 드라마 | 1997-12-19 | [102, 103] |
DB2: 배우 정보
| 배우 ID | 배우 이름 | 생년월일 | 출연 영화 목록 (영화 ID들) |
|---------|------------------|------------|------------------------|
| 101 | Leonardo DiCaprio | 1974-11-11 | [1, 2] |
| 102 | Kate Winslet | 1975-10-05 | [1, 2] |
| 103 | Billy Zane | 1966-02-24 | [2] |
2. Elasticsearch에 데이터 인덱싱
이제 이 두 데이터를 Elasticsearch에 인덱싱하여, 빠르게 검색할 수 있도록 준비하겠습니다.
영화 데이터 인덱싱
await client.index({
index: 'movies', // Elasticsearch 인덱스 이름
id: '1', // 영화 ID
body: {
title: 'Inception',
genre: 'Action',
release_date: '2010-07-16',
actor_ids: [101, 102], // 출연 배우 ID 목록
}
});
배우 데이터 인덱싱
await client.index({
index: 'actors', // Elasticsearch 인덱스 이름
id: '101', // 배우 ID
body: {
name: 'Leonardo DiCaprio',
birth_date: '1974-11-11',
movie_ids: [1, 2], // 출연 영화 ID 목록
}
});
3. Elasticsearch에서 통합 검색
이제 Elasticsearch에서 영화와 배우 데이터를 통합하여 검색할 수 있습니다. 예를 들어, 배우 이름으로 영화 정보를 검색하거나, 영화 제목으로 출연 배우를 찾을 수 있습니다.
배우 이름으로 영화 검색
async function searchMoviesByActor(actorName) {
const { body } = await client.search({
index: 'actors',
body: {
query: {
match: {
name: actorName // 배우 이름으로 검색
}
}
}
});
const actor = body.hits.hits[0]?._source; // 첫 번째 검색 결과에서 배우 정보 추출
const movieIds = actor?.movie_ids; // 해당 배우가 출연한 영화 ID 목록
// 영화 ID로 영화 정보 검색
const movieSearchResults = await client.mget({
index: 'movies',
body: {
ids: movieIds.map(id => id.toString()) // 영화 ID를 사용하여 영화 정보 검색
}
});
console.log(movieSearchResults.body.docs);
}
// 예시: Leonardo DiCaprio가 출연한 영화 검색
searchMoviesByActor('Leonardo DiCaprio');
4. Elasticsearch에서 데이터 통합 검색의 장점
Elasticsearch를 사용하여 영화와 배우 정보를 통합 검색하면, 여러 가지 장점이 있습니다:
- 빠른 검색: Elasticsearch는 분산 검색에 최적화되어 있어, 대규모 데이터에서 빠르게 검색 결과를 제공합니다.
- 복합 검색 가능: 영화 제목, 배우 이름, 장르 등 여러 필드를 기준으로 동시에 검색할 수 있습니다.
- 유연한 검색: 배우 이름으로 영화 정보를 검색하거나, 영화 제목으로 배우 정보를 검색하는 등 다양한 방식의 검색이 가능합니다.
결론
Elasticsearch는 영화와 배우 데이터를 **하나의 인덱스**에서 통합하여 빠르고 유연하게 검색할 수 있도록 해줍니다. 두 데이터베이스(영화 DB와 배우 DB)를 Elasticsearch에 인덱싱하면, 서로 다른 데이터베이스에 저장된 정보를 통합적으로 검색할 수 있는 강력한 검색 시스템을 구축할 수 있습니다.
728x90
'DB' 카테고리의 다른 글
Elasticsearch 외의 검색 엔진들 (0) | 2025.02.22 |
---|