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

MongoDB $text 연산자로 전체 텍스트 검색 수행하는 방법


MongoDB에서 전체 텍스트 검색(Full Text Search)을 수행하려면 $text 연산자를 사용합니다. $text 연산자는 지정된 필드의 내용을 대상으로 텍스트 검색을 수행하며, 이를 사용하기 위해서는 먼저 검색 대상 필드에 텍스트 인덱스(text index)를 생성해야 합니다.

이 글에서는 컬렉션을 생성하고 문서를 삽입한 뒤, $text 연산자로 전체 텍스트 검색을 실행하는 전 과정을 예제와 함께 단계별로 살펴보겠습니다.

1. 텍스트 인덱스 생성

전체 텍스트 검색을 사용하려면 검색 대상이 될 필드에 text 타입의 인덱스를 먼저 생성해야 합니다. createIndex() 메서드를 사용하여 Name 필드에 텍스트 인덱스를 생성해 보겠습니다.

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

인덱스 생성 시 해당 컬렉션이 존재하지 않으면 자동으로 생성되며, 결과에 "createdCollectionAutomatically" : true가 표시됩니다.

2. 문서 삽입

이제 insertOne() 메서드를 사용해 컬렉션에 문서를 차례로 추가합니다.

> db.demo654.insertOne({"Name":"John Doe"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea04e924deddd72997713c8")
}
> db.demo654.insertOne({"Name":"Chris Brown"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea04e9d4deddd72997713c9")
}
> db.demo654.insertOne({"Name":"John Smith"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea04ea54deddd72997713ca")
}
> db.demo654.insertOne({"Name":"David Miller"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea04eb24deddd72997713cb")
}

3. 전체 문서 조회

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

> db.demo654.find();

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

{ "_id" : ObjectId("5ea04e924deddd72997713c8"), "Name" : "John Doe" }
{ "_id" : ObjectId("5ea04e9d4deddd72997713c9"), "Name" : "Chris Brown" }
{ "_id" : ObjectId("5ea04ea54deddd72997713ca"), "Name" : "John Smith" }
{ "_id" : ObjectId("5ea04eb24deddd72997713cb"), "Name" : "David Miller" }

4. 전체 텍스트 검색 실행

이제 $text 연산자와 $search 연산자를 함께 사용하여 Name 필드에 "John"이라는 단어가 포함된 문서를 검색해 보겠습니다.

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

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

{ "_id" : ObjectId("5ea04ea54deddd72997713ca"), "Name" : "John Smith" }
{ "_id" : ObjectId("5ea04e924deddd72997713c8"), "Name" : "John Doe" }

마무리

검색 결과를 보면 Name 필드에 "John"이 포함된 두 개의 문서만 반환된 것을 확인할 수 있습니다. 이처럼 MongoDB의 $text 연산자를 활용하면 텍스트 인덱스가 생성된 필드를 대상으로 빠르고 효율적인 전체 텍스트 검색을 수행할 수 있습니다. 검색 조건이 복잡해지는 경우 $search에 여러 단어나 구문을 조합하여 더욱 정교한 검색도 가능합니다.