개요
이 가이드 에서는 MongoDB 벡터 검색 기능 사용하여 문서에서 검색을 수행하는 방법을 학습 수 있습니다. PHP 라이브러리를 사용하면 애그리게이션 빌더를 사용하여 MongoDB Vector Search 쿼리를 수행할 수 있습니다.
MongoDB Vector Search에 대해 자세히 학습 MongoDB Vector Search 개요를 참조하세요. PHP 라이브러리에 대한 MongoDB Vector Search 구현 내부적으로 $vectorSearch 집계 연산자 사용하여 쿼리를 수행합니다. 이 연산자 에 대해 자세히 학습 Atlas 문서에서 $vectorSearch 참조를 확인하세요.
참고
MongoDB Search
문서에서 고급 전체 텍스트 검색 수행하려면 MongoDB Search API 사용할 수 있습니다. 이 기능 에 대해 학습 MongoDB Search 쿼리 실행 가이드 참조하세요.
MongoDB Vector Search 인덱스
MongoDB Vector Search 쿼리를 수행하려면 먼저 컬렉션 에 MongoDB Vector Search 인덱스 생성해야 합니다. 이 인덱스 유형을 만드는 방법에 대해 자세히 학습 MongoDB 검색 인덱스 가이드 참조하세요.
벡터 검색 애그리게이션 단계
애그리게이션 빌더를 사용하여 MongoDB Vector Search 쿼리를 수행하려면 다음 클래스를 애플리케이션 으로 가져옵니다.
use MongoDB\Builder\Pipeline; use MongoDB\Builder\Stage;
집계 파이프라인 에서 $vectorSearch 단계를 만들려면 다음 작업을 수행합니다.
파이프라인 단계를 저장
Pipeline인스턴스 를 만듭니다.Stage::vectorSearch()메서드를 호출하여 MongoDB Vector Search 단계를 만듭니다.vectorSearch()메서드 본문 내에서 벡터 쿼리 에 대한 기준을 지정합니다.
다음 코드는 기본 MongoDB Vector Search 쿼리를 구성하기 위한 템플릿을 보여줍니다.
$pipeline = new Pipeline( Stage::vectorSearch( /* MongoDB Vector Search query specifications index: '<index name>', path: '<path to embeddings>', ...*/ ), );
다음 매개변수를 vectorSearch() 메서드에 전달해야 합니다.
Parameter | 유형 | 설명 |
|---|---|---|
|
| 벡터 검색 인덱스 의 이름 |
|
| 벡터 임베딩을 저장하는 필드 |
|
| 쿼리 의 벡터 표현 |
|
| 반환할 결과 수 |
벡터 검색 쿼리 예제
이 섹션에서는 애그리게이션 빌더를 사용하여 MongoDB Vector Search 쿼리를 수행하는 방법에 대해 학습 봅니다. 이 섹션의 예제에서는 sample_mflix.embedded_movies 컬렉션 의 샘플 데이터를 사용합니다.
참고
쿼리 벡터 길이
설명을 위해 이 섹션의 예제에서는 실행 가능한 애플리케이션 에서 사용할 수 있는 쿼리 벡터와 비교하여 매우 적은 수의 요소를 포함하는 샘플 쿼리 벡터를 사용합니다. 전체 길이 쿼리 벡터가 포함된 예시 보려면 MongoDB Vector Search 빠른 시작을 PHP 참조하고 Select your language 페이지 오른쪽 상단의 드롭다운에서 를 선택합니다.
기본 벡터 검색 쿼리
다음 코드는 plot_embedding 벡터 필드 에 대해 MongoDB Vector Search 쿼리 수행합니다.
$pipeline = new Pipeline( Stage::vectorSearch( index: 'vector', path: 'plot_embedding', queryVector: [-0.0016261312, -0.028070757, -0.011342932], numCandidates: 150, limit: 5, ), Stage::project( _id: 0, title: 1, ), ); $cursor = $collection->aggregate($pipeline); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"title":"Thrill Seekers"} {"title":"About Time"} {"title":"Timecop"} // Results truncated
벡터 검색 점수
다음 코드는 앞의 예시 와 동일한 쿼리 수행하지만 문서 쿼리 벡터와 얼마나 잘 일치하는지 설명하는 title 필드 와 vectorSearchScore 메타 필드 만 출력합니다.
$pipeline = new Pipeline( Stage::vectorSearch( index: 'vector', path: 'plot_embedding', queryVector: [-0.0016261312, -0.028070757, -0.011342932], numCandidates: 150, limit: 5, ), Stage::project( _id: 0, title: 1, score: ['$meta' => 'vectorSearchScore'], ), ); $cursor = $collection->aggregate($pipeline); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"title":"Thrill Seekers","score":0.927734375} {"title":"About Time","score":0.925750732421875} {"title":"Timecop","score":0.9241180419921875} // Results truncated
벡터 검색 옵션
vectorSearch() 메서드를 사용하여 다양한 유형의 MongoDB Vector Search 쿼리를 수행할 수 있습니다. 원하는 쿼리 에 따라 다음 선택적 매개변수를 vectorSearch()에 전달할 수 있습니다.
선택적 매개변수 | 유형 | 설명 | 기본값 |
|---|---|---|---|
|
| 정확한 인접 이웃( |
|
|
| 검색 할 문서에 대한 사전 필터를 지정합니다. | 필터링 없음 |
|
| 검색 중에 사용할 가장 가까운 이웃의 수를 지정합니다. |
|
이러한 매개변수에 대해 자세히 $vectorSearch 학습 Atlas 문서에서 연산자 참조의 필드 섹션을 참조하세요.