개요
이 가이드 에서는 스칼라 운전자 사용하여 컬렉션 에서 MongoDB Search 쿼리를 실행 방법을 학습 수 있습니다. MongoDB Search를 사용하면 컬렉션에서 전체 텍스트 검색을 수행할 수 있습니다. MongoDB Search 인덱스는 검색 동작과 인덱스 할 필드를 지정합니다.
스칼라 운전자 사용하여 MongoDB Search 인덱스를 만들고 관리 방법을 학습 MongoDB Search 및 MongoDB Vector Search 인덱스 가이드 를 참조하세요.
샘플 데이터
movies sample_mflix 이 가이드 의 예제에서는 Atlas 샘플 데이터 세트의 데이터베이스 에 있는 컬렉션 사용합니다. 무료 MongoDB Atlas 클러스터 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 Atlas 시작하기를 참조하세요.
MongoDB 검색 쿼리 실행
참고
MongoDB Search는 다음 배포에서 사용할 수 있습니다.
MongoDB Atlas v4.2 이상 버전
MongoDB Community Edition v8.2 이상 버전
MongoDB Search 쿼리를 실행 하려면 컬렉션 에 MongoDB Search 인덱스 있어야 합니다. MongoDB Search 인덱스 만드는 방법을 학습 MongoDB Search 및 MongoDB Vector Search 인덱스 가이드 를 참조하세요.
전체 텍스트 검색 수행하려면 $search 파이프라인 단계에서 aggregate() 메서드를 호출합니다. 스칼라 운전자 이 단계를 생성하기 위해 Aggregates.search() 헬퍼 메서드를 제공합니다. search() 메서드에는 다음 인수가 필요합니다.
SearchOperator검색 할 필드 와 텍스트를 지정하는 인스턴스SearchOptions사용할 MongoDB Search 인덱스 의 이름을 포함하여 검색 사용자 지정하는 옵션을 지정하는 인스턴스 .
다음 예시 title 필드 에서 "Alabama" 텍스트를 검색하여 기본값 으로 포함된 _id 필드 와 일치하는 문서의 title 필드 만 프로젝션합니다.
val operator = SearchOperator.text( SearchPath.fieldPath("title"), "Alabama") val options = searchOptions().index("<search index name>") val pipeline = Seq( Aggregates.search(operator, options), Aggregates.project(Projections.include("title")) ) try { Await .result(collection.aggregate(pipeline).toFuture(), 20.seconds) .foreach((doc: Document) => println(doc.toJson())) } catch { case e: Throwable => println(s"There was an error: $e") }
{"_id": {"$oid": "..."}, "title": "Alabama Moon"} {"_id": {"$oid": "..."}, "title": "Crazy in Alabama"} {"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}
팁
Atlas 설명서에서 MongoDB Search 튜토리얼을 보려면 Atlas Search 쿼리 실행을 참조하세요.
MongoDB 검색 메타데이터
참고
MongoDB Search 메타데이터 다음 배포에서 사용할 수 있습니다.
MongoDB Atlas v4.4.11 이상 버전
MongoDB Community Edition v8.2 이상 버전
검색 결과를 반환하지 않고 MongoDB Search 쿼리 에서 메타데이터 만 조회 하려면 Aggregates.searchMeta() 헬퍼 메서드를 사용합니다. 다음 예시 year 필드 2010 근처의 값을 검색하는 쿼리 에 대한 메타데이터 반환합니다.
try { Await .result( collection.aggregate(Seq( Aggregates.searchMeta( SearchOperator.near(2010, 1, SearchPath.fieldPath("year"))) )).toFuture(), 20.seconds ) .foreach((doc: Document) => println(doc.toJson())) } catch { case e: Throwable => println(s"There was an error: $e") }
{"count": {"lowerBound": 35}}
검색 연산자 사용
스칼라 운전자 다음 연산자에 대한 헬퍼 메서드를 제공합니다.
연산자 | 설명 |
|---|---|
불완전한 입력 문자열에서 일련의 문자가 포함된 단어나 구를 검색 합니다. | |
두 개 이상의 연산자를 단일 쿼리로 결합합니다. | |
필드 지정한 값과 일치하는지 확인합니다. | |
문서에 인덱싱된 지정 필드 이름에 대한 경로가 있는지 테스트합니다. | |
지정된 경로에서 BSON 번호, 날짜, 부울, ObjectId, uuid 또는 문자열 값의 배열 검색 하고 필드 값이 지정된 배열 의 임의 값과 같은 문서를 반환합니다. | |
입력 문서와 유사한 문서를 반환합니다. | |
숫자, 날짜 및 GeoJSON 포인트 값을 쿼리하고 점수를 매기는 기능을 지원합니다. | |
인덱스 구성에 지정된 분석기 사용하여 정렬된 용어 시퀀스가 포함된 문서를 검색 합니다. | |
인덱싱된 필드와 값의 조합을 쿼리할 수 있습니다. | |
숫자, 날짜 및 문자열 값을 쿼리하고 점수를 매길 수 있도록 지원합니다. | |
쿼리 필드 정규 표현식 으로 해석합니다. | |
인덱스 구성에서 지정한 분석기 사용하여 전체 텍스트 검색 수행합니다. | |
검색 문자열에 모든 문자와 일치할 수 있는 특수 문자를 사용하는 쿼리를 활성화합니다. |
파이프라인 검색 단계 예시
이 예시 실행 하려면 먼저 movies 컬렉션 에 다음 정의가 있는 MongoDB 검색 인덱스 만들어야 합니다.
{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "lucene.keyword", "type": "string" }, "genres": { "normalizer": "lowercase", "type": "token" } } } }
MongoDB Search 인덱스 생성에 대한 자세한 학습 은 MongoDB Search 및 MongoDB Vector Search 인덱스 가이드 를 참조하세요.
다음 코드는 다음 사양의 $search 단계를 생성합니다.
genres배열"Comedy"가 포함되어 있는지 확인합니다.fullplot필드 에서"new york"구문을 검색합니다.1950~2000사이의year값과 일치합니다.텀
"Love"로 시작하는title값을 검색합니다.
val searchStage = Aggregates.search( SearchOperator.compound() .must( Iterable( SearchOperator.in(fieldPath("genres"), List("Comedy")), SearchOperator.phrase(fieldPath("fullplot"), "new york"), SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000), SearchOperator.wildcard("Love *", fieldPath("title")), ).asJava ) ) val projectStage = Aggregates.project( Projections.include("title", "year", "genres")) try { Await .result( collection.aggregate(Seq(searchStage, projectStage)).toFuture(), 20.seconds ) .foreach((doc: Document) => println(doc.toJson())) } catch { case e: Throwable => println(s"There was an error: $e") }
{"_id": ..., "genres": ["Comedy", "Romance"], "title": "Love at First Bite", "year": 1979} {"_id": ..., "genres": ["Comedy", "Drama"], "title": "Love Affair", "year": 1994}
MongoDB Search 헬퍼 메서드에 대해 자세히 학습하려면, 드라이버 Core API 문서에 있는 SearchOperator 인터페이스 참조를 참조하세요.
추가 정보
MongoDB Search에 대한 자세한 내용은 Atlas 설명서의 MongoDB Search 개요를 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.