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

+ Recent posts