Docs Menu
Docs Home
/
Atlas
/ / / /

결과 페이지 매김

이 페이지의 내용

  • 사용법
  • 고려 사항
  • 기준점 조회
  • 구문
  • 출력
  • 특정 참조 지점 후 Atlas Search
  • searchAfter 구문
  • 출력
  • 특정 참조 지점 이전 Atlas Search
  • searchBefore 구문
  • searchBefore 출력
  • 예시
  • 페이지 1 조회 및 페이지 매김 토큰 생성
  • searchAfter를 사용하여 페이지 2 조회
  • searchBefore를 사용하여 1 페이지로 돌아가기
  • searchAfter 및 $skip을 사용하여 2 페이지에서 5 페이지로 이동
  • 페이지화된 결과에 패싯 사용

MongoDB 6.0.13+ 또는 7.0.5+ 버전을 실행하는 Atlas 클러스터에서 Atlas Search를 사용하면 참조 지점 뒤나 앞에서 $search 쿼리 결과를 순차적으로 조회할 수 있습니다. $search searchAfter 또는 searchBefore 옵션을 사용하여 결과를 순서대로 탐색하고 애플리케이션에서 '다음 페이지' 및 '이전 페이지' 기능을 빌드합니다.

페이지가 매겨진 결과를 조회하려면 다음 단계를 수행하세요.

  1. 쿼리하려는 필드에 대한 인덱스를 만듭니다.

  2. 참조 지점을 반환하는 $search 쿼리를 실행합니다. 자세한 내용은 참조 지점 조회를 참조하세요.

  3. 후속 $search 쿼리에서 참조 지점을 사용하여 결과의 다음 또는 이전 문서 세트를 검색합니다.

    • '다음 페이지' 함수를 빌드하기 위한 결과 검색에 대해 자세히 알아보려면 특정 기준점 이후 Atlas 검색을 참조하세요.

    • '이전 페이지' 함수를 빌드하기 위한 결과 검색에 대해 자세히 알아보려면 특정 참조 지점 전 Atlas 검색을 참조하세요.

    • 결과의 특정 페이지로 이동하려면 $skip$limit$search searchAfter 또는 searchBefore 옵션과 결합하세요. 예를 들어, 페이지 3에서 페이지 5로 이동하고 페이지당 10개의 결과를 표시하려면 다음을 수행하세요.

      1. 3 페이지의 마지막 결과에 대한 기준점과 함께 searchAfter 을 사용하여 결과를 조회합니다(결과 30).

      2. $skip 를 사용하여 4 페이지의 10 개 결과(결과 31-40)를 건너뛰고 $limit 를 사용하여 결과를 10 문서로 제한합니다.

      3. 5 페이지에 대한 결과를 반환합니다. (결과 41-50)

      $skip 여기서 를 searchAfter 옵션과 함께 사용하면 1 결과의 페이지(10 문서)만 건너뛰도록 쿼리 최적화됩니다. 이에 비해 옵션 $skip 없이 를 $search searchAfter 사용하면 쿼리 4 페이지의 결과(40 문서)를 건너뜁니다. 자세히 2 학습 5 searchAfter 및 $skip을 사용하여 페이지에서 페이지로 이동을 참조하세요.

여러 문서에 동일한 값이 있는 필드 를 정렬하면 타이가 발생합니다. MongoDB 동점인 쿼리 결과의 순서를 보장하지 않으므로 searchAftersearchBefore를 사용할 때 중복과 불일치가 발생할 수 있습니다. 결정론적 검색 동작을 보장하려면 다음 원칙을 적용하세요.

  • 관련성 점수가 동점인 것을 방지하려면 고유한 필드 기준으로 쿼리 정렬합니다.

  • 고유하지 않은 필드 기준으로 주로 정렬하려면 고유 필드 에 세컨더리 정렬 절을 추가하여 순위 결정자 제공 .

  • 변경할 수 없는 필드 기준으로 쿼리 결과를 정렬합니다. Atlas Search 초기 쿼리와 후속 쿼리 사이에 컬렉션 에 수행한 업데이트를 반영합니다. updated_time 와(과) 같이 변경 가능한 필드 기준으로 정렬하고 첫 번째 쿼리와 두 번째 쿼리 사이에 컬렉션 업데이트 경우, Atlas Search 동일한 문서를 다르게 정렬할 수 있습니다.

변경할 수 없는 필드나 고유한 필드를 기준으로 쿼리 결과를 정렬하는 방법을 알아보려면 Atlas Search 결과 정렬을 참조하세요.

검색 노드를 배포한 경우 다음 사항을 고려하세요.

  • 검색 노드마다 결과가 다를 수 있으므로 searchScore 를 기준으로 결과를 정렬하지 마세요.

  • searchScore를 계산하기 위해 호스팅하다 아직 인덱스 에서 제거되지 않은 삭제된 문서를 포함하여 호스트에 존재하는 모든 문서를 고려합니다. 삭제는 각 호스팅하다 에서 독립적으로 수행되므로 쿼리 라우팅되는 호스팅하다 에 따라 searchScore 가 변경될 수 있습니다.

검색 노드에서 searchScore 기준으로 정렬할 때 페이지 매김을 지원 하려면 MongoDB 피드백 엔진에서 이 요청 투표를 하세요.

특정 지점의 쿼리 결과를 검색하려면 $search 쿼리에서 참조 지점을 제공해야 합니다. $search 단계 이후의 $project 단계에서 $meta 키워드 searchSequenceToken을 사용하여 참조 지점을 검색할 수 있습니다.

searchSequenceToken 구문
1[{
2 "$search": {
3 "index": "<index-name>",
4 "<operator-name>"|"<collector-name>": {
5 <operator-specification>|<collector-specification>
6 }
7 "sort": {
8 "score": {
9 "$meta": "searchScore", _id:1
10 }
11 }
12 ...
13 },
14 {
15 "$project": {
16 { "paginationToken" : { "$meta" : "searchSequenceToken" } }
17 },
18 ...
19}]

searchSequenceToken 은 결과의 각 문서에 대해 기본64인코딩된 토큰을 생성합니다. 토큰의 길이는 쿼리의 정렬 옵션에 지정된 필드 수에 따라 늘어납니다. 토큰은 데이터베이스의 스냅샷에 연결되지 않습니다.

결과의 문서는 기본 순서로 정렬되며 쿼리에서 sort 옵션을 지정하지 않는 한 기본 순서를 따릅니다. 결과 정렬에 대해 자세히 알아보려면 Atlas 검색 결과 정렬을 참조하세요.

참조 지점 이후를 검색하려면 $search 쿼리에서 searchAfter 옵션과 searchSequenceToken으로 생성된 토큰을 사용하여 참조 지점을 지정해야 합니다. searchSequenceToken에서 생성된 토큰은 searchSequenceToken 토큰을 생성한 $search 쿼리를 다시 실행할 때만 사용할 수 있습니다. 토큰을 사용하는 후속 $search 쿼리의 의미(검색 필드 및 값)는 searchSequenceToken이 토큰을 생성한 쿼리와 동일해야 합니다.

searchAfter 옵션을 사용하여 애플리케이션에서 '다음 페이지' 함수를 빌드할 수 있습니다. 이에 대한 데모는 이 페이지의 예제 를 참조하세요.

searchAfter 구문
1{
2 "$search": {
3 "index": "<index-name>",
4 "<operator-name>"|"<collector-name>": {
5 <operator-specification>|<collector-specification>
6 },
7 "searchAfter": "<base64-encoded-token>",
8 "sort": {
9 "score": {
10 "$meta": "searchScore", _id:1
11 }
12 }
13 ...
14 },
15 "$project": {
16 { "paginationToken" : { "$meta" : "searchSequenceToken" } }
17 },
18 ...
19}

Atlas Search는 지정된 토큰 이후의 결과에서 문서를 반환합니다. 단계 이후의 단계에서 줄에 표시된 대로 searchSequenceToken $project $search 11을(를) 지정했기 때문에 Atlas Search는 결과에서 문서에 대해 생성된 토큰을 반환합니다. 이러한 토큰은 동일한 의미 체계를 가진 다른 쿼리의 기준점으로 사용할 수 있습니다.

결과의 문서는 기본 순서로 정렬되며 쿼리에서 sort 옵션을 지정하지 않는 한 기본 순서를 따릅니다. 결과 정렬에 대해 자세히 알아보려면 Atlas 검색 결과 정렬을 참조하세요.

기준점 앞에서 Atlas Search를 하려면 searchSequenceToken 에 의해 생성된 토큰과 함께 searchBefore 옵션을 사용하여 $search 쿼리에서 기준점을 지정해야 합니다. searchSequenceToken 이(가) 토큰을 생성한 $search 쿼리를 다시 실행하는 경우에만 searchSequenceToken 에서 생성된 토큰을 사용할 수 있습니다. 토큰을 사용하는 후속 $search 쿼리의 시맨틱(Atlas Search 필드 및 값)은 searchSequenceToken 토큰을 생성한 쿼리와 동일해야 합니다.

searchBefore 옵션을 사용하여 애플리케이션에서 '이전 페이지' 함수를 빌드할 수 있습니다. '이전 페이지' 함수를 빌드하려면 다음을 결합합니다.

이에 대한 데모는 이 페이지의 searchBefore 쿼리 예제 를 참조하세요.

searchBefore 구문
1{
2 "$search": {
3 "index": "<index-name>",
4 "<operator-name>"|"<collector-name>": {
5 <operator-specification>|<collector-specification>
6 },
7 "searchBefore": "<base64-encoded-token>",
8 "sort": {
9 "score": {
10 "$meta": "searchScore", _id:1
11 }
12 }
13 ...
14 },
15 "$project": {
16 { "paginationToken" : { "$meta" : "searchSequenceToken" } }
17 },
18 ...
19}

Atlas Search는 지정된 토큰 앞의 결과에서 문서를 역순으로 반환합니다. 또한 $search 단계 이후의 $project 단계에서 searchSequenceToken을 지정했기 때문에 Atlas Search는 결과에 있는 문서에 대해 생성된 토큰도 반환합니다(11 행 참조). 이러한 토큰은 동일한 의미 체계를 가진 다른 쿼리의 참조 지점으로 사용될 수 있습니다.

다음 예시에서는 동적 매핑을 사용하는 default라는 이름의 Atlas Search 인덱스가 있는 sample-mflix.movies 컬렉션을 사용합니다. 컬렉션을 로드하고 인덱스를 생성하면 컬렉션에 대해 다음 쿼리를 실행할 수 있습니다.

쿼리는 점 조회 방법을 보여 준 다음 후속 쿼리에서 사용하여 지정된 점 전후의 동일한 텀 에 대한 추가 결과를 조회 .

이 예제에서는 다음 작업을 수행하는 방법을 보여 줍니다.

  1. 페이지 1 조회 및 페이지 매김 토큰 생성

  2. searchAfter를 사용하여 페이지 2 조회

  3. searchBefore를 사용하여 1 페이지로 돌아가기

  4. searchAfter 및 $skip을 사용하여 2 페이지에서 5 페이지로 이동

  5. 페이지화된 결과에 패싯 사용

참고

기본적으로 Atlas Search는 문서의 관련성 점수에 따라 결과의 문서를 정렬합니다. 결과 내 여러 문서가 동일한 점수를 가질 경우 Atlas Search는 임의로 정렬된 결과를 반환합니다. 지정된 순서로 문서를 반환하려면 쿼리가 결과를 정렬할 고유한 필드인 released를 지정합니다.

돌아가기

카운트