개요
이 가이드 에서는 MongoDB 검색 기능 사용하여 문서에서 검색을 수행하는 방법을 학습 수 있습니다. Laravel MongoDB 모델을 사용하여 직접 MongoDB Search 쿼리를 수행할 수 있는 API 제공합니다. 이 가이드는 MongoDB 검색 인덱스를 생성하는 방법을 설명하고 Laravel 통합을 사용하여 검색을 수행하는 방법의 예시를 제공합니다.
참고
배포 호환성
MongoDB Atlas 클러스터에 연결해야만 MongoDB 검색 기능을 사용할 수 있습니다. 자체 관리형 배포서버에서는 이 기능을 사용할 수 없습니다.
MongoDB 검색에 대해 더 알아보려면 Atlas 문서의 개요를 참조하세요. MongoDB 검색 API는 내부적으로 $search 집계 연산자를 사용하여 쿼리를 수행합니다. 이 연산자에 대한 자세한 내용은 Atlas 문서의 $search 참조를 확인하세요.
참고
모든 유형의 MongoDB Search 쿼리 에 대해 이 가이드 에 설명된 메서드를 사용하지 못할 수도 있습니다. 더 복잡한 사용 사례의 경우 집계 빌더를 사용하여 집계 파이프라인 만듭니다.
MongoDB 에서 벡터 임베딩에 대한 검색을 수행하려면 Laravel MongoDB MongoDB Vector Search API 사용할 수 있습니다. 이 기능 에 대해 학습 MongoDB Vector Search 가이드 참조하세요.
MongoDB Search 인덱스 생성
MongoDB 검색 인덱스를 다음 방법 중 하나로 생성할 수 있습니다.
Schema파사드에서create()메서드를 호출하고, 인덱스 생성 세부 정보와 함께searchIndex()헬퍼 메서드를 전달합니다. 이 전략에 대해 자세히 알아보려면 스키마 빌더 가이드의 MongoDB 검색 및 MongoDB 벡터 검색 인덱스 관리 섹션을 참조하세요.컬렉션에 액세스한 후 다음 코드에 표시된 대로 MongoDB PHP 라이브러리에서
createSearchIndex()메서드를 호출하세요.$collection = DB::connection('mongodb')->getCollection('movies'); $collection->createSearchIndex( ['mappings' => ['dynamic' => true]], ['name' => 'search_index'] );
중요
비동기 검색 인덱스 작업
MongoDB Search 인덱스를 생성하고 제거 작업은 비동기적으로 실행 . 따라서 동일한 네임스페이스 에 있는 동일한 이름의 인덱스 삭제되는 동안에는 새 MongoDB Search 인덱스 생성할 수 없습니다. createSearchIndex() 메서드를 호출하기 전에 MongoDB 충돌하는 인덱스 삭제할 때까지 기다려야 합니다.
또한 인덱스를 사용하기 전에 인덱스 쿼리할 수 있을 때까지 기다려야 합니다. 인덱스 쿼리 가능한지 확인하려면 메서드를 실행 Collection::listSearchIndexes() 메서드 출력에서 새 인덱스 설명하는 문서 찾은 다음 필드 queryable 값을 확인합니다. 인덱스 생성 후 추가된 문서는 쿼리 결과에서 즉시 사용할 수 없습니다.
쿼리 수행
이 섹션에서는 Laravel 통합에서 MongoDB Search API 사용하는 방법을 학습 수 있습니다.
일반 쿼리
Laravel 통합은 search() 메서드를 쿼리 빌더 메서드 및 Eloquent 모델 메서드로 제공합니다. search() 메서드를 사용하여 컬렉션의 문서에 대해 MongoDB Search 쿼리를 실행 수 있습니다.
search() 메서드에 SearchOperatorInterface의 인스턴스 또는 연산자 유형, 필드 이름 및 쿼리 값을 포함하는 배열인 operator 매개 변수를 전달해야 합니다. Search::text() 메서드를 호출하고 쿼리할 필드와 검색어 또는 구문을 전달하여 SearchOperatorInterface 인스턴스를 생성할 수 있습니다.
SearchOperatorInterface 인스턴스를 생성하려면 애플리케이션에 다음 import 문을 포함해야 합니다.
use MongoDB\Builder\Search;
다음 코드는 Movie 모델의 title 필드 에서 텀 'dream'에 대해 MongoDB Search 쿼리 수행합니다.
$movies = Movie::search( sort: ['title' => 1], operator: Search::text('title', 'dream'), )->all();
[ { "title": "Dreaming of Jakarta", "year": 1990 }, { "title": "See You in My Dreams", "year": 1996 } ]
search() 메서드를 사용하여 다양한 유형의 MongoDB 검색 쿼리를 수행할 수 있습니다. 원하는 쿼리에 따라 다음 선택 사항 매개변수를 search()에 전달할 수 있습니다.
선택적 매개변수 | 유형 | 설명 |
|---|---|---|
|
| 사용할 MongoDB Search 인덱스 의 이름을 제공합니다. |
|
| 검색어를 원래 문맥에 맞게 표시하기 위한 하이라이트 옵션 지정 |
|
| 전용 검색 노드에서 여러 세그먼트에 걸쳐 검색 쿼리 병렬화 |
|
| 결과의 개수를 검색하기 위한 수량 옵션 지정 |
|
| 문서를 반환하기 위해 해당 지점 바로 다음부터 시작하는 참조점 지정 |
|
| 문서를 반환하기 위해 해당 지점 바로 이전부터 시작하는 참조점 지정 |
|
| 결과에 대한 점수의 자세한 분석을 조회할지 여부 지정 |
|
| 결과를 정렬할 필드 지정 |
|
| 백엔드 데이터베이스에서 전체 문서 조회를 수행할지, 아니면 MongoDB 검색에서 직접 저장된 소스 필드만 반환할지를 지정합니다. |
|
| 검색어에 대한 분석 정보를 조회하기 위한 추적 옵션 지정 |
이러한 매개변수에 대해 자세히 $search 학습 Atlas 문서에서 연산자 참조의 필드 섹션을 참조하세요.
자동 완성 쿼리
Laravel 통합은 autocomplete() 메서드를 쿼리 빌더 메서드 및 Eloquent 모델 메서드로 제공합니다. autocomplete() 메서드를 사용하여 컬렉션의 문서에 대해 자동 완성 검색을 실행할 수 있습니다. 이 메서드는 쿼리 경로로 지정한 필드의 값만 반환합니다.
이 유형의 MongoDB Search 쿼리에 대해 자세히 학습하려면 Atlas 문서에서 자동 완성 참조를 확인하세요.
참고
자동 완성 검색을 수행하려면 먼저 컬렉션 에 자동 완성 구성을 사용하여 MongoDB Search 인덱스 만들어야 합니다. 검색 인덱스 생성에 대해 자세히 학습 이 가이드 의 MongoDB 검색 인덱스 생성 섹션을 참조하세요.
다음 코드는 title 필드 의 string "jak" 에 대해 MongoDB Search 자동 완성 쿼리를 수행합니다.
$movies = Movie::autocomplete('title', 'jak')->all();
[ "Dreaming of Jakarta", "Jakob the Liar", "Emily Calling Jake" ]
다음 선택 사항 매개변수를 autocomplete() 메서드에 전달하여 쿼리를 사용자 지정할 수도 있습니다.
선택적 매개변수 | 유형 | 설명 | 기본값 |
|---|---|---|---|
|
| 퍼지 검색 및 퍼지 검색 옵션을 활성화합니다. |
|
|
| 토큰을 검색할 순서를 지정합니다 |
|
이러한 매개변수에 대한 자세한 내용은 Atlas 문서의 autocomplete 연산자 참조의 옵션 섹션을 참조하세요.