본문 바로가기
Database

Elasticsearch 개념 정리: 역인덱스

by kmkhm 2025. 4. 26.

Elasticsearch의 핵심 데이터 구조인 역인덱스(Inverted Index)에 대해 상세히 정리해 보겠습니다. 이 글에서는 역인덱스의 기본 개념부터 고급 기능까지 살펴보겠습니다.

 

역인덱스란?

역인덱스는 텍스트 검색 엔진의 핵심 데이터 구조로, 문서 내 단어를 색인화하여 빠른 전문 검색(Full-text search)을 가능하게 합니다. 일반적인 인덱스가 문서 ID를 기준으로 내용을 찾는 방식이라면, 역인덱스는 반대로 단어를 기준으로 해당 단어가 등장하는, 문서를 찾는 방식입니다.

 

정방향 인덱스 vs 역방향 인덱스

정방향 인덱스(Forward Index)

정방향 인덱스는 책 → 내용의 관계로 구성됩니다. 도서관에서 특정 책을 찾으면 그 책의 목차와 내용을 볼 수 있는 것과 비슷합니다.

책1: "해리 포터" → [마법, 호그와트, 마법사, 해리, 론, 헤르미온느]
책2: "반지의 제왕" → [반지, 마법, 호빗, 프로도, 간달프]
책3: "스타워즈" → [제다이, 라이트세이버, 다스베이더, 우주]

위 구조에서 특정 책에 어떤 단어들이 있는지 바로 알 수 있습니다. 하지만 "마법"이라는 단어가 포함된 모든 책을 찾으려면 모든 책의 내용을 하나하나 살펴봐야 합니다.

 

역방향 인덱스(Inverted Index)

역인덱스는 단어 → 책의 관계로 구성됩니다. 도서관의 주제별 색인이나 키워드 색인과 유사합니다.

"마법" → [책1, 책2]
"호그와트" → [책1]
"반지" → [책2]
"제다이" → [책3]
"라이트세이버" → [책3]

"마법"이라는 단어가 포함된 모든 책을 즉시 찾을 수 있습니다. 하지만 특정 책의 전체 내용을 보려면 모든 단어 목록을 확인해야 합니다.

 

이러한 특성때문에 각각 사용되는 용도가 다릅니다. 정방향 인덱스의 경우, 특정 문서의 전체 내용을 조회해야 하는 문서 관리 시스템이나 파일 시스템에서 쓰입니다. 반대로 역인덱스의 경우, 특정 키워드가 포함된 문서를 찾아야 하는 검색 엔진이나 로그 메세지 분석에서 주로 사용됩니다.

 

역인덱스 구축 과정

Elasticsearch에서 역인덱스가 구축되는 과정은 다음과 같습니다.

1. 문서 수집

검색할 문서를 Elasticsearch에 인덱싱합니다. 문서는 JSON 형태로 전송되며, 각 문서에는 고유한 ID가 할당됩니다.

2. 분석 과정

수집된 문서는 분석 파이프라인을 통과하게 됩니다. 여기서 문자 필터, 토크나이저, 토큰 필터와 단계를 거칩니다.

3. 인덱싱

분석된 토큰은 역인덱스 구조에 저장됩니다. 역인덱스 구조에는 토큰이 저장되는 문서의 ID, 해당 문서에서 토큰이 등장하는 빈도수 같은 정보과 저장됩니다.

 

역인덱스 검색 과정

Elasticsearch에 검색 쿼리가 전달되면 다음과 같은 단계로 처리됩니다.

1. 쿼리 파싱 및 분석: 쿼리 문자열 파싱

2. 쿼리 실행: 용어가 등장하게 되는 문서 ID를 조회하고 필터링 조건이 있다면 조건에 맞는 문서만 선택

3. 결과 조합: 정렬 및 페이지네이션

 

다음과 같은 예시로 쿼리를 작성하게 됩니다.

GET /books/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "해리포터"
          }
        }
      ],
      "filter": [
        {
          "term": {
            "genre": "판타지"
          }
        },
        {
          "range": {
            "publish_date": {
              "gte": "2000-01-01"
            }
          }
        }
      ]
    }
  },
  "sort": [
    { "rating": { "order": "desc" } },
    { "_score": { "order": "desc" } }
  ],
  "from": 0,
  "size": 10
}

1. "해리포터" 단어가 제목에 포함된 문서를 검색합니다.

2. 장르가 "판타지"이고 2000년 이후 발행된 도서만 필터링합니다.

3. 평점(rating) 내림차순으로 정렬한 뒤, 동일한 평점에서는 검색 관련성 점수로 정렬합니다.

4. 첫 번째 페이지(0부터 시작)의 결과 10개를 반환합니다.

 

여기서 books는 Elasticsearch 내에서 인덱스를 가리키고 인덱스내에는 다음과 같은 문서가 저장되어 있습니다.

{
  "_id": "1",
  "_source": {
    "title": "해리포터와 마법사의 돌",
    "author": "J.K. 롤링",
    "genre": "판타지",
    "publish_date": "2001-06-26",
    "rating": 4.8,
    "description": "11살 소년 해리 포터가 호그와트 마법학교에서 겪는 모험..."
  }
}

 

 

결론적으로 역인덱스는 Elasticsearch의 핵심 데이터 구조로, 빠른 검색을 가능하게 하는 기반 기술입니다. 문서 중심이 아닌 단어 중심의 구조를 통해 방대한 양의 텍스트 데이터에서도 실시간에 가까운 검색 성능을 제공합니다. 효율적인 Elasticsearch 활용을 위해서는 역인덱스의 원리를 이해하고, 데이터 특성과 검색 요구사항에 맞게 인덱스 설계와 최적화를 수행하는 것이 중요합니다. 다음 포스팅에서는Elasticsearch의 실제 사용법에 대해 자세히 알아보겠습니다.

 

 

댓글