MongoDB 텍스트 인덱스

MongoDB 텍스트 인덱스 (Text Indexes)

컬렉션 안의 문자열 필드를 대상으로 키워드 검색을 하고 싶을 때 텍스트 인덱스를 만들어요. 텍스트 인덱스를 만들면 $text 연산자로 단어 단위의 검색을 수행할 수 있어요. 단, 컬렉션마다 텍스트 인덱스는 하나만 만들 수 있고, 그 하나의 인덱스에 여러 필드를 포함할 수 있다는 특징이 있습니다.

출처: Text Indexes on Self-Managed Deployments - MongoDB 공식 매뉴얼

텍스트 인덱스 만들기

텍스트 인덱스는 인덱스 키에 text라는 특별한 타입을 붙여서 만들어요. 여러 필드를 한꺼번에 인덱스에 넣을 수 있어요.

db.<collection>.createIndex(
   {
      <field1>: "text",
      <field2>: "text",
      ...
   }
)

컬렉션에는 텍스트 인덱스가 하나만 있어야 하지만, 그 안에 필드는 여러 개를 넣을 수 있어요. 직접 운영하는(온프레미스) 배포에서는 텍스트 인덱스가 $text 쿼리 연산을 지원해요. $text를 쓰려면 반드시 텍스트 인덱스를 먼저 만들어야 해요.

텍스트 인덱스의 특징

  • 복합 텍스트 인덱스: 텍스트 인덱스 키와 다른 타입의 키를 함께 가진 복합 인덱스에서, 도큐먼트가 인덱스에 걸리는지는 오직 텍스트 인덱스 필드가 결정해요. 다른 키는 도큐먼트 참조 여부에 영향을 주지 않아요.
  • 항상 희소(sparse): 텍스트 인덱스는 항상 희소 인덱스로 동작해요. 만들 때 sparse 옵션을 넣어도 MongoDB가 무시해요. 텍스트 인덱스 필드가 없거나, 값이 null이거나, 빈 배열인 도큐먼트에는 텍스트 인덱스 항목이 생기지 않아요.

어떤 경우에 쓸까

MongoDB는 현재 텍스트 인덱스보다 개선된 전문 검색 솔루션인 MongoDB Search와 벡터 검색인 MongoDB Vector Search를 제공하고 있어요. 새로운 프로젝트라면 텍스트 인덱스 대신 MongoDB Search 인덱스나 MongoDB Vector Search 인덱스 사용을 권장해요. 다만 직접 운영하는 배포에서 가볍게 $text 검색이 필요하다면 텍스트 인덱스가 유용해요.

더 알아보기