텍스트 검색
개요
이 가이드에서는 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
텍스트 검색을 실행하기 전에 텍스트 인덱스를 만들어야 합니다. 텍스트 인덱스는 텍스트 검색을 실행할 문자열 또는 문자열 배열 필드를 지정합니다.
다음 예시에서는 fast_and_furious_movies
컬렉션의 title
필드에 대해 텍스트 검색을 실행합니다. title
필드에서 텍스트 검색을 활성화하려면 인덱스 빌더를 사용하여 다음 스니펫으로 텍스트 인덱스를 만듭니다.
collection.createIndex(Indexes.text("title"))
자세한 내용은 다음 리소스를 참조하세요.
텍스트 검색
텍스트 검색을 지정하려면 Filters.text()
메서드를 사용합니다.
Filters.text()
메서드는 필터 빌더를 사용하여 텍스트 검색 중에 검색할 내용을 지정하는 쿼리 필터를 정의합니다. 쿼리 필터는 BSON 인스턴스로 표시됩니다. 쿼리 필터를 find()
메서드에 전달하여 텍스트 검색을 실행합니다.
find()
메서드를 실행하면 MongoDB는 컬렉션의 텍스트 인덱스로 인덱싱된 모든 필드에 대해 텍스트 검색을 실행합니다. MongoDB는 하나 이상의 검색어와 각 결과에 대한 관련성 점수가 포함된 문서를 반환합니다. 관련성 점수에 대한 자세한 내용은 결과 정렬 가이드의 텍스트 검색 섹션을 참조하세요.
옵션 지정
TextSearchOptions
을 Filters.text()
메서드의 두 번째 매개변수로 포함하여 대/소문자 구분과 같은 텍스트 검색 옵션을 지정할 수 있습니다. 기본적으로 텍스트 검색은 대소문자 구분 없이 실행되므로 소문자와 대문자 값을 모두 검색합니다.
대소문자 구분 검색을 지정하려면 다음 코드 스니펫을 사용합니다.
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()
메서드에 전달하여 텍스트 Atlas Search에 구문을 지정합니다. 이스케이프 따옴표는 큰따옴표 앞에 백슬래시 문자가 오는 문자입니다. 구문 주위에 이스케이프 따옴표를 추가하지 않으면 find()
메서드가 텀 Atlas Search를 실행합니다.
예시
다음 예시에서는 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])