개요
이 가이드 에서는 Mongoid를 사용하여 텍스트 검색 실행 방법을 학습 수 있습니다. 텍스트 쿼리 사용하면 문자열 값이 있는 필드를 효율적으로 쿼리 할 수 있습니다.
MongoDB 문자열 값이나 문자열 요소의 배열인 값이 있는 필드에 대한 텍스트 쿼리를 지원 위해 텍스트 인덱스를 제공합니다. 텍스트 인덱스에 대해 자세히 학습 서버 매뉴얼에서 자체 관리 배포서버의 텍스트 인덱스 를 참조하세요.
참고
Atlas Search
이 가이드 텍스트 쿼리에 중점을 둡니다. 데이터베이스 MongoDB Atlas 에서 호스팅되는 경우, Atlas Search 기능 사용하여 보다 강력하고 유연한 전체 텍스트 검색을 수행할 수 있습니다. Atlas Search 에 대해 자세히 학습하려면 Atlas 설명서에서 Atlas Search 개요 를 참조하세요.
다음 단계를 수행하여 텍스트 쿼리 실행 수 있습니다.
모델에서 텍스트 인덱스를 정의합니다.
대상 컬렉션 에 텍스트 인덱스 만듭니다.
텍스트 쿼리 수행합니다.
다음 섹션에서는 이러한 각 작업을 수행하는 방법에 대해 설명합니다.
모델에서 텍스트 인덱스 정의
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"}
추가 정보
쿼리 필터 구성에 대해 자세히 학습 문서 쿼리 지정을 참조하세요.
CRUD 작업 수행에 대해 자세히 학습 데이터 작업 수행 가이드 참조하세요.