Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 텍스트 검색 구현하는 방법: $text와 $search 연산자 활용 가이드

MongoDB에서는 $text 연산자와 $search 연산자를 함께 사용하여 문자열 필드에 대한 전문(full-text) 검색을 수행할 수 있습니다. 이 기능을 사용하려면 먼저 검색 대상이 되는 필드에 텍스트 인덱스(text index)를 생성해야 합니다.

이번 글에서는 실제 예제를 통해 MongoDB에서 텍스트 검색을 구현하는 과정을 단계별로 살펴보겠습니다.

1단계: 텍스트 인덱스 생성

텍스트 검색을 위해서는 먼저 컬렉션의 해당 필드에 텍스트 인덱스를 만들어야 합니다. createIndex() 메서드에 "text" 옵션을 지정하면 됩니다.

> db.demo156.createIndex({"StudentName":"text"});
{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

위 결과를 보면 컬렉션이 자동으로 생성되었고(createdCollectionAutomatically: true), 인덱스가 하나 추가된 것을 확인할 수 있습니다.

2단계: 문서 삽입

이제 테스트용 문서 몇 개를 컬렉션에 삽입해 보겠습니다. insertOne() 메서드를 사용하여 학생 이름 데이터를 추가합니다.

> db.demo156.insertOne({"StudentName":"Chris Brown"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3547e8fdf09dd6d08539e6")
}
> db.demo156.insertOne({"StudentName":"John Doe"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3547f2fdf09dd6d08539e7")
}
> db.demo156.insertOne({"StudentName":"John Smith"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3547f7fdf09dd6d08539e8")
}

3단계: 전체 문서 조회

find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo156.find();

위 쿼리를 실행하면 다음과 같은 출력 결과가 나타납니다.

{ "_id" : ObjectId("5e3547e8fdf09dd6d08539e6"), "StudentName" : "Chris Brown" }
{ "_id" : ObjectId("5e3547f2fdf09dd6d08539e7"), "StudentName" : "John Doe" }
{ "_id" : ObjectId("5e3547f7fdf09dd6d08539e8"), "StudentName" : "John Smith" }

4단계: 텍스트 검색 쿼리 실행

이제 핵심인 텍스트 검색 쿼리입니다. $text 연산자 안에 $search를 사용하여 원하는 단어를 검색할 수 있습니다. 아래 예제에서는 "John"이라는 단어가 포함된 문서를 찾습니다.

> db.demo156.find({ $text: { $search: "John" } } )

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e3547f7fdf09dd6d08539e8"), "StudentName" : "John Smith" }
{ "_id" : ObjectId("5e3547f2fdf09dd6d08539e7"), "StudentName" : "John Doe" }

정리

MongoDB의 텍스트 검색은 크게 두 가지 단계로 구성됩니다.

  • 텍스트 인덱스 생성: db.collection.createIndex({필드명: "text"})로 검색 대상 필드에 인덱스를 생성합니다.
  • 검색 쿼리 실행: find({ $text: { $search: "검색어" } }) 형식으로 단어를 검색합니다.

이처럼 $text$search를 활용하면 별도의 검색 엔진 없이도 MongoDB 내에서 간편하게 전문 검색 기능을 구현할 수 있습니다. 참고로 여러 단어를 공백으로 구분하여 검색하면 OR 조건으로 동작하며, 정확한 구문 검색이 필요할 때는 따옴표로 묶어 검색할 수도 있습니다.