개요
이 가이드 에서는 MongoDB 코틀린 (Kotlin) 운전자 에서 텍스트 쿼리 실행 방법을 학습 수 있습니다.
텍스트 쿼리 사용하여 지정된 필드에 텀 또는 구문 이 포함된 문서를 조회 수 있습니다. 텀 공백 문자를 제외한 일련의 문자입니다. 구는 임의의 수의 공백 문자가 있는 일련의 용어입니다.
다음 섹션에서는 다음 유형의 텍스트 쿼리를 수행하는 방법을 설명합니다.
용어로 텍스트 쿼리
문구로 텍스트 쿼리하기
용어가 제외된 쿼리 텍스트
텍스트 쿼리 결과를 정렬하려면 결과 정렬 가이드 의 텍스트 쿼리 섹션을 참조하세요.
샘플 문서
다음 섹션에서는 fast_and_furious_movies 컬렉션 에 대한 텍스트 쿼리의 예를 기능 . 각 섹션은 collection 라는 변수를 사용하여 fast_and_furious_movies 컬렉션 의 MongoCollection 인스턴스 를 참조합니다.
fast_and_furious_movies 컬렉션에는 분노의 질주(Fast and Furious) 영화 프랜차이즈의 일부인 여러 영화 중 하나를 설명하는 문서가 포함되어 있습니다. 각 문서에는 제목 필드와 태그 필드가 있습니다.
{ "_id": 1, "title": "2 Fast 2 Furious ", "tags": ["undercover", "drug dealer"] } { "_id": 2, "title": "Fast 5", "tags": ["bank robbery", "full team"] } { "_id": 3, "title": "Furious 7", "tags": ["emotional"] } { "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }
이 데이터는 다음 Kotlin 데이터 클래스로 모델링됩니다.
data class Movies( val id: Int, val title: String, val tags: List<String> )
Text Index
텍스트 쿼리 실행 전에 텍스트 인덱스 만들어야 합니다. 텍스트 인덱스 텍스트 쿼리 실행 문자열 또는 문자열 배열 필드 지정합니다.
다음 예제에서는 컬렉션 의 필드 에 대해 텍스트 쿼리를 실행 title fast_and_furious_movies. 필드 에서 텍스트 쿼리를 활성화 하려면 title 인덱스 빌더를 사용하여 다음 스니펫으로 텍스트 인덱스 생성합니다.
collection.createIndex(Indexes.text("title"))
자세한 내용은 다음 리소스를 참조하세요.
텍스트 쿼리
Filters.text() 메서드를 사용하여 텍스트 쿼리 지정합니다.
Filters.text() 메서드는 필터 빌더 를 사용하여 텍스트 쿼리 중에 검색 할 내용을 지정하는 쿼리 필터를 정의합니다. 쿼리 필터하다 는 BSON 인스턴스 로 표시됩니다. 쿼리 필터 find() 메서드에 전달하여 텍스트 쿼리 실행.
find() 메서드를 실행하면 MongoDB 컬렉션 의 텍스트 인덱스 로 인덱싱된 모든 필드에 대해 텍스트 쿼리 실행합니다. MongoDB 하나 이상의 쿼리 텀과 각 결과에 대한 관련성 점수가 포함된 문서를 반환합니다. 관련성 점수에 대한 자세한 내용은 결과 정렬 가이드의 텍스트 쿼리 섹션을 참조하세요.
옵션 지정
Filters.text() 메서드의 두 번째 매개 변수로 TextSearchOptions 를 포함하여 대소문자 구분과 같은 텍스트 쿼리 옵션을 지정할 수 있습니다. 기본값 으로 텍스트 쿼리는 대소문자 구분 없이 실행 쿼리 가 소문자와 대문자 값을 모두 일치시킵니다.
대소문자를 구분하는 쿼리 지정하려면 다음 스니펫을 사용하세요.
val options: TextSearchOptions = TextSearchOptions().caseSensitive(true) val filter = Filters.text("SomeText", options)
이 섹션에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 API 문서를 참조하세요.
용어로 텍스트 쿼리
텀 Filters.text() 메서드에 문자열로 전달하여 텍스트 쿼리 에 텀 지정합니다.
예시
다음 예시 fast_and_furious_movies 컬렉션 의 문서에서 "fast"라는 텀 포함된 제목에 대한 텍스트 쿼리 실행합니다.
val filter = Filters.text("fast") val findFlow = collection.find(filter) findFlow.collect { println(it) }
Movies(id=1, title=2 Fast 2 Furious, tags=[undercover, drug dealer]) Movies(id=2, title=Fast 5, tags=[bank robbery, full team])
텍스트 쿼리 에서 여러 용어를 일치시키려면 Filters.text() 빌더 메서드에서 각 텀 공백으로 구분합니다. 빌더 메서드는 텍스트 쿼리 Bson 인스턴스 로 반환합니다. 이를 find() 메서드에 전달하면 용어와 일치하는 문서가 반환됩니다.
예시
다음 예시 fast_and_furious_movies 컬렉션 의 문서에서 "fate" 또는 "7" 라는 용어가 포함된 제목에 대한 텍스트 쿼리 실행합니다.
val filter = Filters.text("fate 7") val findFlow = collection.find(filter) findFlow.collect { println(it) }
Movies(id=3, title=Furious 7, tags=[emotional]) Movies(id=4, title=The Fate of the Furious, tags=[betrayal])
문구로 텍스트 쿼리하기
이스케이프 따옴표가 포함된 구문 을 Filters.text() 메서드에 전달하여 텍스트 쿼리에 사용할 구문을 지정합니다. 이스케이프 따옴표는 큰따옴표 앞에 백슬래시 문자가 오는 문자입니다. 구문 주위에 이스케이프 따옴표를 추가하지 않으면 find() 메서드는 텀 검색을 실행합니다.
예시
다음 예시 fast_and_furious_movies 컬렉션 의 문서에서 "fate of the furious"라는 구문이 포함된 제목에 대한 텍스트 쿼리 실행합니다.
val filter = Filters.text("\"fate of the furious\"") val findFlow = collection.find(filter) findFlow.collect { println(it) }
Movies(id=4, title=The Fate of the Furious, tags=[betrayal])
용어가 제외된 쿼리 텍스트
텍스트 쿼리 에서 제외하려는 각 텀 에 대해 Filters.text() 빌더 메서드에 전달한 문자열에서 텀 앞에 빼기 기호를 붙입니다.
쿼리 에서 반환된 문서 중 텍스트 인덱스 필드 에 제외된 텀 포함되어 있지 않습니다.
중요
쿼리 에서 용어를 제외하려면 텍스트 쿼리 텀 하나 이상 있어야 합니다.
예시
다음 예시 fast_and_furious_movies 컬렉션 의 문서에서 "furious" 텀 포함하지만 "fast" 텀 포함하지 않는 제목에 대한 텍스트 쿼리 실행합니다.
val filter = Filters.text("furious -fast") val findFlow = collection.find(filter) findFlow.collect { println(it) }
Movies(id=3, title=Furious 7, tags=[emotional]) Movies(id=4, title=The Fate of the Furious, tags=[betrayal])