Docs Menu

텍스트 검색

이 가이드 에서는 Mongoid를 사용하여 텍스트 검색 실행 방법을 학습 수 있습니다. 텍스트 검색 사용하면 문자열 값이 있는 필드를 효율적으로 쿼리 할 수 있습니다.

MongoDB 문자열 값이나 문자열 요소의 배열인 값이 있는 필드에 대한 텍스트 검색 쿼리를 지원 위해 텍스트 인덱스를 제공합니다. 텍스트 인덱스에 대해 자세히 학습 서버 매뉴얼에서 자체 관리 배포서버의 텍스트 인덱스를 참조하세요.

참고

Atlas Search

이 가이드 텍스트 검색 에 중점을 둡니다. 데이터베이스 MongoDB Atlas 에서 호스팅되는 경우, Atlas Search 기능 사용하여 보다 강력하고 유연한 텍스트 검색을 수행할 수 있습니다. Atlas Search 에 대해 자세히 학습 Atlas 설명서에서 Atlas Search 개요를 참조하세요.

다음 단계를 수행하여 텍스트 검색 실행 수 있습니다.

  1. 모델에서 텍스트 인덱스를 정의합니다.

  2. 대상 컬렉션 에 텍스트 인덱스 만듭니다.

  3. 텍스트 검색 쿼리 수행합니다.

다음 섹션에서는 이러한 각 작업을 수행하는 방법에 대해 설명합니다.

모델 정의에 텍스트 인덱스 지정하려면 index 매크로를 사용합니다. 다음 코드는 description 필드 에 텍스트 인덱스 포함하는 Dish 모델 클래스를 생성합니다.

class Dish
include Mongoid::Document
field :name, type: String
field :description, type: String
index description: 'text'
end

참고

앞의 코드에서 'text' 로 표시된 대로 인덱스 유형을 문자열로 지정해야 합니다.

다음으로 컬렉션 에 텍스트 인덱스 생성해야 합니다. Atlas UI 또는 Compass 와 같은 인터페이스를 사용하여 인덱스 를 만들 수 있습니다. Rails 프레임워크 사용하여 애플리케이션 개발하는 경우 다음 Rake 작업 실행 모델 사양에 따라 인덱스 생성할 수 있습니다.

bundle exec rake db:mongoid:create_indexes

Mongoid에서 인덱스를 사용하는 방법에 대해 자세히 학습 인덱스로 쿼리 최적화 가이드 참조하세요.

텍스트 검색 수행하려면 $text 평가 쿼리 연산자 와 쿼리 필터하다 의 $search 필드 차례로 사용합니다. $text 연산자 인덱스된 텍스트 필드에서 텍스트 검색 수행합니다. $search 필드 인덱스된 텍스트 필드에서 검색 할 텍스트를 지정합니다. 이 연산자 에 대해 자세히 학습 서버 매뉴얼에서 $text 참조를 참조하세요.

용어를 검색하려면 쿼리 필터에서 해당 용어를 문자열로 지정합니다. 여러 용어를 검색하려면 문자열에서 각 용어를 공백으로 구분합니다.

참고

여러 용어 검색

여러 용어를 검색할 때 Mongoid는 텍스트 인덱스 필드에 해당 용어 중 하나 이상이 포함된 문서를 반환합니다.

'cake coffee cream' 문자열을 사용하여 검색 가정해 보겠습니다. 다음 목록에서는 이 텍스트 쿼리 와 일치하는 값에 대해 설명합니다.

  • 'Has strong coffee notes.'

  • 'Good for creamy coffee fans.'

  • 'A rich but light cake.'

  • 'A creamy coffee cake with cranberries.'

다음 예시 'herb' 텀 포함된 description 값에 대한 텍스트 검색 실행합니다.

Dish.where('$text' => {'$search' => 'herb'})
# Sample output
{"_id":"...","description":"A bright, herb-based salad. A perfect starter for vegetarians and vegans.","name":"Kale Tabbouleh"}
{"_id":"...","description":"Grilled whole fish stuffed with herbs and pomegranate seeds. Serves 3-4.","name":"Herbed Whole Branzino"}

검색 텀 이지만 MongoDB 텍스트 인덱스 접미사 형태소 분석을 사용하여 유사한 단어를 일치시키기 때문에 이 메서드는 이 포함된 설명과도 일치합니다.'herb' 'herbs' MongoDB 용어를 일치시키는 방법에 대해 자세히 학습 {+서버 매뉴얼}의 텍스트 인덱스 속성을 참조하세요.

구문을 검색 하려면 이스케이프 따옴표가 포함된 구문을 쿼리 필터하다 의 문자열로 지정합니다. 구문 주위에 이스케이프 따옴표를 추가하지 않으면 Mongoid는 텀 검색 실행합니다.

이스케이프된 따옴표는 백슬래시 문자(\) 뒤에 큰따옴표 문자(")가 오는 것입니다.

다음 예시 "serves 2" 구가 포함된 description 값에 대한 텍스트 검색 실행합니다.

Dish.where('$text' => {'$search' => "\"serves 2\""})
# Sample output
{"_id":"...","description":"A vegetarian take on the classic dish that uses lentils as a base. Serves 2.","name":"Shepherd’s Pie"}
{"_id":"...","description":"Baked trout seasoned with garlic, lemon, dill, and, of course, butter. Serves 2.","name":"Garlic Butter Trout"}

텍스트 검색 에서 제외할 각 텀 또는 구문에 대해 쿼리 필터하다 에서 빼기 기호(-) 접두사가 붙은 텀 또는 구문을 문자열로 지정합니다.

중요

검색 에서 용어를 제외하려면 하나 이상의 텀 를 검색 해야 합니다. 용어를 검색 하지 않으면 Mongoid는 어떤 문서도 반환하지 않습니다.

다음 예시 'vegan' 텀 는 포함하지만 'tofu' 텀 포함하지 않는 description 값에 대한 텍스트 검색 실행합니다.

Dish.where('$text' => {'$search' => 'vegan -tofu'})
# Sample output
{"_id":"...","description":"A bright, herb-based salad. A perfect starter for vegetarians and vegans.","name":"Kale Tabbouleh"}

To learn more about constructing query filters, see 문서 쿼리 지정.

CRUD 작업 수행에 대해 자세히 학습 데이터 작업 수행 가이드 참조하세요.