Docs Menu
Docs Home
/
Atlas
/ / / /

결과 페이지 매김

MongoDB 7.0.5+를 실행 클러스터에서 MongoDB 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)

      여기서 searchAfter 옵션과 함께 $skip을 사용하면 1개 페이지의 결과(10개 문서)만 건너뛰도록 쿼리를 최적화합니다. 이에 반해, $search searchAfter 옵션 없이 $skip을 사용하면 쿼리는 4개 페이지의 결과(40개 문서)를 건너뜁니다. 자세한 내용은 searchAfter 및 $skip을 사용하여 페이지 2에서 페이지 5로 이동하는 방법을 참조하세요.

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

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

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

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

변경할 수 없거나 고유한 필드 기준으로 쿼리 결과를 정렬하는 방법을 학습하려면 MongoDB 검색 결과 정렬을 참조하세요.

검색 노드를 배포한 경우 다음을 고려합니다.

  • 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"
10 }
11 },
12 ...
13 },
14 {
15 "$project": {
16 "paginationToken" : { "$meta" : "searchSequenceToken" }
17 },
18 ...
19}]

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

쿼리 에 sort 옵션을 지정하지 않는 한 결과의 문서는 기본값 순서로 정렬됩니다. 결과 정렬에 대해 학습하려면 MongoDB 검색 결과 정렬을 참조하세요.

참조 지점 이후를 검색하려면 $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"
11 }
12 },
13 ...
14 },
15 "$project": {
16 "paginationToken" : { "$meta" : "searchSequenceToken" }
17 },
18 ...
19}

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

쿼리 에 sort 옵션을 지정하지 않는 한 결과의 문서는 기본값 순서로 정렬됩니다. 결과 정렬에 대해 학습하려면 MongoDB 검색 결과 정렬을 참조하세요.

기준점 앞에서 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"
11 }
12 },
13 ...
14 },
15 "$project": {
16 "paginationToken" : { "$meta" : "searchSequenceToken" }
17 },
18 ...
19}

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

다음 예제에서는 동적 매핑이 포함된 default 라는 이름의 MongoDB Search 인덱스 있는 sample-mflix.movies 컬렉션 사용합니다. 컬렉션 로드하고 인덱스 만들면 컬렉션 에 대해 다음 쿼리를 실행 수 있습니다.

쿼리들은 참조 지점을 조회하는 방법을 보여주며, 후속 쿼리에서 이를 사용하여 지정된 참조 지점 전후의 동일한 용어에 대한 추가 결과를 조회합니다.

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

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

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

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

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

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

참고

기본값 으로 MongoDB Search는 문서의 관련성 점수를 기준으로 결과의 문서를 정렬합니다. 결과의 여러 문서에 동일한 점수가 있는 경우 MongoDB Search는 임의로 정렬된 결과를 반환합니다. 문서를 정해진 순서로 반환하기 위해 쿼리는 고유한 필드released을 지정하여 결과를 정렬합니다.

돌아가기

카운트