개요
이 가이드 에서는 MongoDB Java 운전자 에서 텍스트 쿼리 실행 방법을 학습 수 있습니다.
텍스트 쿼리 사용하여 지정된 필드 에 텀 또는 구문이 포함된 문서를 조회 수 있습니다. 텀 공백 문자를 제외한 일련의 문자입니다. 구는 임의의 수의 공백 문자가 있는 일련의 용어입니다.
다음 섹션에서는 다음 유형의 텍스트 쿼리를 수행하는 방법을 설명합니다.
용어로 텍스트 쿼리
문구로 텍스트 쿼리하기
용어가 제외된 쿼리 텍스트
텍스트 쿼리 결과를 정렬하려면 결과 정렬 가이드 의 텍스트 쿼리 섹션을 참조하세요.
샘플 문서
다음 섹션에서는 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"] }
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
를 포함하여 대소문자 구분과 같은 텍스트 쿼리 옵션을 지정할 수 있습니다. 기본값 으로 텍스트 쿼리는 대소문자 구분 없이 실행 소문자와 대문자 값을 모두 검색 합니다.
대소문자 구분 검색을 지정하려면 다음 코드 스니펫을 사용합니다.
TextSearchOptions options = new TextSearchOptions().caseSensitive(true); Bson filter = Filters.text("SomeText", options);
이 섹션에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 API 문서를 참조하세요.
용어로 텍스트 검색
텀 Filters.text()
메서드에 문자열로 전달하여 텍스트 쿼리 에 텀 지정합니다.
예시
다음 예시 fast_and_furious_movies
컬렉션 의 문서에서 "fast" 텀 포함된 제목에 대한 텍스트 쿼리 실행합니다.
Bson filter = Filters.text("fast"); collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));
다음은 앞에 설명한 코드의 출력입니다.
{ "_id": 1, "title": "2 Fast 2 Furious ", "tags": ["undercover", "drug dealer"] } { "_id": 2, "title": "Fast 5", "tags": ["bank robbery", "full team"] }
텍스트 쿼리 에서 여러 용어를 일치시키려면 Filters.text()
빌더 메서드에서 각 텀 공백으로 구분합니다. 빌더 메서드는 텍스트 쿼리 Bson
인스턴스 로 반환합니다. 이를 find()
메서드에 전달하면 용어와 일치하는 문서가 반환됩니다.
예시
다음 예시 fast_and_furious_movies
컬렉션 의 문서에서 "fate" 또는 "7" 라는 용어가 포함된 제목에 대한 텍스트 쿼리 실행합니다.
Bson filter = Filters.text("fate 7"); collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));
다음은 앞에 설명한 코드의 출력입니다.
{ "_id": 3, "title": "Furious 7", "tags": ["emotional"] } { "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }
문구로 텍스트 검색
Filters.text()
이스케이프 따옴표가 포함된 구문을 메서드에 전달하여 텍스트 쿼리 에 사용할 구문을 지정합니다. 이스케이프 따옴표는 큰따옴표 앞에 백슬래시 문자가 오는 문자입니다. 구문 주위에 이스케이프 따옴표를 추가하지 않으면 메서드는 find()
텀 검색 실행합니다.
예시
다음 예시 fast_and_furious_movies
컬렉션 의 문서에서 "fate of the furious"라는 구문이 포함된 제목에 대한 텍스트 쿼리 실행합니다.
Bson filter = Filters.text("\"fate of the furious\""); collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));
다음은 앞에 설명한 코드의 출력입니다.
{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }
용어가 제외된 텍스트 검색
텍스트 쿼리 에서 제외하려는 각 텀 에 대해 Filters.text()
빌더 메서드에 전달한 문자열에서 텀 앞에 빼기 기호를 붙입니다.
검색에서 반환된 문서에는 텍스트 인덱스 필드에서 제외된 용어가 포함되어 있지 않습니다.
중요
검색 에서 용어를 제외하려면 텍스트 쿼리 텀 하나 이상 있어야 합니다.
예시
다음 예시 fast_and_furious_movies
컬렉션 의 문서에서 "furious" 텀 포함하지만 "fast" 텀 포함하지 않는 제목에 대한 텍스트 쿼리 실행합니다.
Bson filter = Filters.text("furious -fast"); collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));
다음은 앞에 설명한 코드의 출력입니다.
{ "_id": 3, "title": "Furious 7", "tags": ["emotional"] } { "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }