쿼리 결과 페이지 매김 방법
이 페이지의 내용
이 튜토리얼에서는 Atlas Search 쿼리 결과에 페이지를 매겨 애플리케이션에서 '다음 페이지' 및 '이전 페이지'와 같은 기능을 빌드하는 방법을 보여 줍니다. 또한 $skip
및 $limit
를 사용하여 페이지를 건너뛰는 방법을 보여 줍니다. 이 튜토리얼에서는 다음 단계를 안내합니다.
sample_mflix.movies
컬렉션에 대한 정적 매핑을 사용하여 Atlas Search 인덱스를 설정합니다.인덱싱된 필드에 대해 Atlas Search 쿼리를 실행하여 다음을 수행할 수 있는 순차적 결과를 반환합니다.
'다음 페이지' 및 '이전 페이지'와 같은 기능을 빌드하기 위해 페이지를 순회합니다.
두 번째 페이지에서 다섯 번째 페이지로 이동하고 결과에서 페이지를 건너뜁니다.
결과에서 각 장르의 총 영화 수를 조회합니다.
시작하기 전에 Atlas 클러스터가 전제 조건에 설명된 요구 사항을 충족하는지 확인하세요.
참고
Atlas Search $search
searchSequenceToken
를 사용하여 순차 결과를 검색하려면 Atlas cluster에서 MongoDB v6 를 실행해야 합니다.0.13+ 또는 v7.0.5+.
정적 매핑을 사용하여 Atlas Search 인덱스 만들기
이 섹션에서는 정적 매핑 을 사용하여 sample_mflix.movies
컬렉션의 필드를 인덱싱하는 Atlas Search 인덱스를 만듭니다.
필수 역할
Atlas Search 인덱스를 생성하려면 프로젝트에 대한 Project Data Access Admin
이상의 액세스 권한이 있어야 합니다.
절차
클러스터의 Atlas Search 페이지로 이동합니다.
사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.
사이드바에서 Services 제목 아래의 Atlas Search 을 클릭합니다.
Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search 를 클릭합니다.
cluster의 Browse Collections 버튼을 클릭합니다.
데이터베이스를 확장하고 컬렉션을 선택합니다.
컬렉션의 Search Indexes 탭을 클릭합니다.
클러스터의 이름을 클릭합니다.
Atlas Search 탭을 클릭합니다.
Atlas Search 인덱스를 정의합니다.
다음 인덱스 정의는 다음 필드에 대한 인덱스를 구성합니다.
title
필드를 필드에 대한 전체 텍스트 검색을 위한 문자열 유형으로 지정genres
필드에 대한 패싯 검색을 위한 stringFacet 유형으로 필드released
필드를 사용하여 결과를 정렬하기 위한 날짜 유형으로 필드를 지정합니다.
Atlas 사용자 인터페이스에서 Atlas Search Visual Editor 또는 Atlas Search JSON Editor를 사용하여 인덱스를 생성할 수 있습니다.
Next를 클릭합니다.
Refine Your Index를 클릭합니다.
Index Configurations 섹션에서 Dynamic Mapping을 비활성화하도록 토글합니다.
Field Mappings 섹션에서 Add Field 을 클릭하고 Add Field Mapping 창에서 다음 필드에 대한 설정을 하나씩 구성한 후 Add 를 클릭합니다.
필드 이름데이터 유형 구성title
Stringgenres
stringFacetreleased
DateSave Changes를 클릭합니다.
기본 인덱스 정의를 다음 정의로 바꿉니다.
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": { 6 "type": "string" 7 }, 8 "genres": { 9 "type": "stringFacet" 10 }, 11 "released": { 12 "type": "date" 13 } 14 } 15 } 16 } Next를 클릭합니다.
쿼리 실행 및 결과 페이지 매기기
이 섹션에서는 쿼리를 실행하여 제목에 summer
이라는 용어가 포함된 영화에 대한 결과를 검색합니다. 쿼리에서는 기준점을 검색한 다음 후속 쿼리에서 사용하여 지정된 기준점 전후에 동일한 용어에 대한 추가 결과를 검색합니다.
참고
기본적으로 Atlas Search는 문서의 관련성 점수를 기준으로 결과의 문서를 정렬합니다. 결과의 여러 문서에 동일한 점수가 있는 경우 Atlas Search는 임의로 정렬된 결과를 반환합니다. 문서를 정해진 순서로 반환하기 위해 쿼리는 고유 필드 released
을 지정하여 결과를 정렬합니다.
이 섹션에서는 다음을 수행하는 방법을 설명합니다.
절차
이러한 쿼리를 실행하려면 먼저 다음을 수행해야 합니다.
에서 mongosh
클러스터에연결합니다.
터미널 창에서 mongosh
를 열고 클러스터에 연결합니다. 연결에 대한 자세한 내용은 mongosh를 통한 연결을 참조하세요.
페이지 1 조회 및 페이지 매김 토큰 생성
샘플 쿼리는 다음 파이프라인 단계를 사용하여 첫 번째 페이지에 대한 결과를 검색하고 후속 쿼리를 위한 토큰 또는 참조 지점을 검색합니다.
결과를 10 개 문서로 제한합니다. | |
결과에는 문서의
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
다음을 사용하여 페이지 2 조회 searchAfter
추가 결과를 검색하려면 결과를 검색할 기준점을 지정합니다. 이 쿼리는 결과를 검색하여 애플리케이션에서 '다음 페이지'와 같은 함수를 빌드하는 방법을 보여 줍니다.
샘플 쿼리는 다음 파이프라인 단계를 사용하여 동일한 용어에 대한 이전 쿼리 에서 searchSequenceToken
가 생성한 토큰을 사용하여 두 번째 페이지에 대한 결과를 검색합니다.
| |
결과를 10 개 문서로 제한합니다. | |
결과에는 문서의
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchAfter": "COwRGgkpAPQV0hQAAAA=", "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
다음을 사용하여 1 페이지로 돌아가기 searchBefore
이전 결과를 조회하려면 결과를 조회하려는 기준점 이전의 기준점을 지정합니다. 이 쿼리는 결과를 검색하여 애플리케이션에서 '이전 페이지'와 같은 함수를 빌드하는 방법을 보여 줍니다.
샘플 쿼리는 다음 파이프라인 단계를 사용하여 동일한 용어에 대한 이전 쿼리 에서 searchSequenceToken
가 생성한 토큰을 사용하여 첫 번째 페이지의 결과로 반환합니다.
| |
결과를 10 개 문서로 제한합니다. | |
결과에는 문서의
|
참고
기본적으로 Atlas Search는 참조 지점 이전의 결과를 검색하기 위해 토큰을 지정하는 쿼리에 대해 결과를 역순으로 반환합니다. 문서를 순서대로 반환하기 위해 쿼리는 toArray() 및 JavaScript reverse()
메서드를 사용합니다.
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchBefore": "CMwSGgkpAECHcCIAAAA=", "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ]).toArray().reverse()
및 을(를) 사용하여 2 페이지에서 페이지로 이동 5 searchAfter
$skip
결과를 건너뛰고 2 페이지에서 5 페이지로 이동하려면 searchSequenceToken
에서 생성된 토큰을 사용하여 결과를 조회하려는 기준점을 지정한 다음 결과에서 20개의 문서를 건너뜁니다. 이 쿼리는 결과를 검색하여 애플리케이션에서 페이지 건너뛰기를 허용하는 함수를 빌드하는 방법을 보여 줍니다.
샘플 쿼리는 다음 파이프라인 단계를 사용하여 동일한 용어에 대해 이전 쿼리 에서 searchSequenceToken
에 의해 생성된 토큰과 $skip
및 $limit
단계를 사용하여 5 페이지의 결과로 이동합니다.
| |
지정된 참조 지점 이후의 결과에서 20 개의 문서를 건너 searchAfter 2 | |
결과를 10 개 문서로 제한합니다. | |
결과에는 문서의
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchAfter": "COwRGgkpAPQV0hQAAAA=", "sort": { "released": 1 } } }, { "$skip": 20 }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
페이지가 매겨진 결과에 패싯 사용
이 섹션에서는 searchSequenceToken
을(를) Atlas Search 패싯과 함께 사용하는 방법을 보여 줍니다.
샘플 쿼리는 다음 파이프라인 단계를 사용합니다:
| |
searchSequenceToken 옵션을 사용하여 생성된 결과에 각 문서에 대한 토큰을 저장하는 paginationToken 필드를 추가합니다. | |
결과를 10 개 문서로 제한합니다. | |
다음 필드를 반환합니다.
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "facet": { "operator": { "text": { "path": "title", "query": "summer" } }, "facets": { "genresFacet": { "type": "string", "path": "genres" } } } } }, { "$addFields": { "paginationToken" : { "$meta" : "searchSequenceToken" } } }, { "$limit": 10 }, { "$facet": { "docs": [ { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : 1 } } ], "meta": [ { "$replaceWith": "$$SEARCH_META" }, { "$limit": 1 } ] } }, { "$set": { "meta": { "$arrayElemAt": ["$meta", 0] } } } ])