중요
$scoreFusion
MongoDB 8.2+를 사용하는 배포서버에만 사용할 수 있습니다.
정의
$scoreFusion
$scoreFusion
먼저 모든 입력 파이프라인을 독립적으로 실행한 다음 입력 파이프라인 결과를 중복 제거하고 최종 점수 결과 설정하다 로 결합합니다.$scoreFusion
입력 파이프라인의 문서 점수와 가중치를 기반으로 순위가 매겨진 문서 설정하다 출력합니다. 파이프라인 단계의 입력 점수를 기반으로 점수를 계산하는 산술 표현식 지정할 수 있습니다. 기본값 으로 다양한 입력 파이프라인 단계의 문서 점수 평균을 사용합니다.여러 기준을 기반으로 단일 컬렉션 에서 문서를 검색 하고 지정된 모든 기준을 설정하다 최종 점수 결과 집합을 조회
$scoreFusion
를 사용합니다.
구문
이 단계에는 다음 구문이 있습니다.
{ $scoreFusion: { input: { pipelines: { <input-pipeline-name>: <expression>, <input-pipeline-name>: <expression>, ... }, normalization: "none|sigmoid|minMaxScaler" }, combination: { weights: { <input-pipeline-name>: <numeric expression>, <input-pipeline-name>: <numeric expression>, ... }, method: "avg|expression", expression: <expression> } } }
필드
$scoreFusion
은(는) 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
---|---|---|
| 객체 |
|
| 객체 | 해당 파이프라인 정의하는 집계 단계에 대한 파이프라인 이름 맵이 포함되어 입력 파이프라인 제한 사항에 대한 자세한 내용은 입력 파이프라인 및 입력 파이프라인 이름을 참조하세요. |
| 문자열 | 결과를 결합하기 전에 점수를
|
| 객체 | 선택 사항. |
| 객체 | 선택 사항. 결과를 결합할 때 정규화된 입력 파이프라인 점수에 적용 할 가중치입니다. 파이프라인 라인에 해당합니다. 파이프라인의 가중치가 지정되지 않은 경우 기본값 가중치는 |
| 문자열 | 선택 사항. 점수를 결합하는 방법을 지정합니다. 값은 다음과 같습니다.
생략하는 경우 기본값은 |
| 산술 표현식 | 선택 사항. 입력 점수를 결합하는 로직을 지정합니다. 이는
|
| 부울 | 선택 사항. 각 입력 파이프라인 의 자세한 점수 정보를 출력 문서의 메타데이터 에 포함할지 여부를 지정합니다. 생략하면 기본값 |
행동
컬렉션
$scoreFusion
는 단일 컬렉션 에만 사용할 수 있습니다. 데이터베이스 범위에서는 이 집계 단계를 사용할 수 없습니다.
De-Duplication
$scoreFusion
최종 출력에서 여러 입력 파이프라인에서 결과의 중복을 제거합니다. 각 고유 입력 문서 입력 파이프라인 출력에 문서 나타나는 횟수에 관계없이 $scoreFusion
출력에 최대 한 번 표시됩니다.
입력 파이프라인
각 input
파이프라인 선택 파이프라인인 동시에 채점 파이프라인이어야 합니다.
선택 파이프라인
선택 파이프라인은 검색 후 수정을 수행하지 않고 컬렉션 에서 문서 설정하다 검색합니다. $scoreFusion
은(는) 서로 다른 입력 파이프라인의 문서를 비교하므로 모든 입력 파이프라인이 수정되지 않은 동일한 문서를 출력해야 합니다.
선택 파이프라인 다음 단계만 포함되어야 합니다.
유형 | 단계 |
---|---|
검색 단계 |
|
주문 단계 | |
페이지 매김 단계 |
점수 산정 파이프라인
점수 파이프라인 문서 점수에 따라 문서를 정렬하거나 정렬합니다. $scoreFusion
은(는) 점수가 매겨진 파이프라인 결과의 순서를 사용하여 출력 점수에 영향을 줍니다. 점수 산정 파이프라인은 다음 기준 중 하나를 충족해야 합니다.
입력 파이프라인 이름
input
의 파이프라인 이름은 다음 제한 사항을 충족해야 합니다.
빈 문자열이 아니어야 합니다.
다음으로 시작하면 안 됩니다.
$
문자열의 어느 곳에도 ASCII null 문자 구분 기호
\0
를 포함하지 않아야 합니다.다음을 포함해서는 안 됩니다.
.
점수 세부 정보
scoreDetails
을(를) true
(으)로 설정하다 $scoreFusion
이(가) 각 문서 에 대해 scoreDetails
메타데이터 필드 생성합니다. scoreDetails
필드 에는 최종 순위에 대한 정보가 포함되어 있습니다.
참고
scoreDetails
을(를) true
(으)로 설정하다 $scoreFusion
이(가) 각 문서 에 대해 scoreDetails
메타데이터 필드 설정합니다. 기본값 으로 scoreDetails
메타필드를 자동으로 출력하지 않습니다.
메타데이터 필드 보려면 scoreDetails
, 또는 와 $project
$addFields
같은 단계에서 $meta
표현식 통해 명시적으로 설정하다 해야 $set
합니다.
scoreDetails
필드 에는 다음과 같은 하위 필드가 포함되어 있습니다.
필드 | 설명 |
---|---|
| 이 문서 에 대한 점수의 숫자 값입니다. |
|
|
| 점수를 정규화하는 데 사용되는 정규화 메서드입니다. |
| 파이프라인 결과를 결합하는 데 사용되는 결합 메서드 및 표현식 . |
| 각 배열 항목에 이 문서 출력하는 입력 파이프라인에 대한 정보가 포함된 배열 입니다. |
details
필드 의 각 배열 항목에는 다음 하위 필드가 포함되어 있습니다.
필드 | 설명 |
---|---|
| 이 문서 출력하는 입력 파이프라인 의 이름입니다. |
| 정규화 전 파이프라인 의 문서 점수입니다. |
| 입력 파이프라인 의 가중치입니다. |
| 선택 사항. 입력 파이프라인 이 문서 에 대해 |
| 입력 파이프라인 의 |
경고
MongoDB scoreDetails
에 대한 특정 출력 형식을 보장하지 않습니다.
예시
다음 코드 블록은 $search
, $vectorSearch
및 $match
입력 파이프라인이 있는 $scoreFusion
작업의 scoreDetails
필드 보여줍니다.
scoreDetails: { value: 7.847857250621068, description: 'the value calculated by combining the scores (either normalized or raw) across input pipelines from which this document is output from:', normalization: 'sigmoid', combination: { method: 'custom expression', expression: "{ string: { $sum: [ { $multiply: [ '$$searchOne', 10 ] }, '$$searchTwo' ] } }" }, details: [ { inputPipelineName: 'searchOne', inputPipelineRawScore: 0.7987099885940552, weight: 1, value: 0.6896984675751023, details: [] }, { inputPipelineName: 'searchTwo', inputPipelineRawScore: 2.9629626274108887, weight: 1, value: 0.950872574870045, details: [] } ] }
결과 설명
MongoDB $scoreFusion
연산을 기존 집계 단계 설정하다 로 변환하여, 이를 조합하여 쿼리 실행 전에 출력 결과를 계산합니다. $scoreFusion
작업에 대한 결과 설명은 가 $scoreFusion
최종 결과를 구성하는 데 사용하는 기본 집계 단계의 전체 실행을 보여줍니다.
예시
이 예시 임베딩 및 텍스트 필드가 있는 컬렉션 사용합니다. 컬렉션 에 search
및 vectorSearch
유형 인덱스를 만듭니다.
다음 인덱스 정의는 인덱싱된 필드에 대해 쿼리를 실행 위해 컬렉션 에서 동적으로 인덱싱할 수 있는 모든 필드를 자동으로 인덱싱합니다.$search
db.embedded_movies.createSearchIndex( "<INDEX_NAME>", { mappings: { dynamic: true } } )
다음 인덱스 정의는 해당 필드 에 대해 쿼리를 실행 위해 컬렉션 의 임베딩이 $vectorSearch
있는 필드 를 인덱싱합니다.
db.embedded_movies.createSearchIndex( "<INDEX_NAME>", "vectorSearch", { "fields": [ { "type": "vector", "path": "<FIELD_NAME>", "numDimensions": <NUMBER_OF_DIMENSIONS>, "similarity": "dotProduct" } ] } );
다음 집계 파이프라인 다음 입력 파이프라인과 함께 $scoreFusion
을(를) 사용합니다.
파이프라인 | 반환된 문서 수 | 설명 |
---|---|---|
| 20 | 임베딩으로 지정된 텀 에 대해 |
| 20 | 동일한 텀 에 대해 전체 텍스트 검색 실행하고 결과를 20 개 문서로 제한합니다. |
1 db.embedded_movies.aggregate( [ 2 { 3 $scoreFusion: { 4 input: { 5 pipelines: { 6 searchOne: [ 7 { 8 "$vectorSearch": { 9 "index": "<INDEX_NAME>", 10 "path": "<FIELD_NAME>", 11 "queryVector": <QUERY_EMBEDDINGS>, 12 "numCandidates": <NUMBER_OF_NEAREST_NEIGHBORS_TO_CONSIDER>, 13 "limit": <NUBMER_OF_DOCUMENTS_TO_RETURN> 14 } 15 } 16 ], 17 searchTwo: [ 18 { 19 "$search": { 20 "index": "<INDEX_NAME>", 21 "text": { 22 "query": "<QUERY_TERM>", 23 "path": "<FIELD_NAME>" 24 } 25 } 26 }, 27 ] 28 }, 29 normalization: "sigmoid" 30 }, 31 combination: { 32 method: "expression", 33 expression: { 34 $sum: [ 35 {$multiply: [ "$$searchOne", 10]}, "$$searchTwo" 36 ] 37 } 38 }, 39 "scoreDetails": true 40 } 41 }, 42 { 43 "$project": { 44 _id: 1, 45 title: 1, 46 plot: 1, 47 scoreDetails: {"$meta": "scoreDetails"} 48 } 49 }, 50 { $limit: 20 } 51 ] )
이 파이프라인 다음 조치를 수행합니다.
input
파이프라인을 실행합니다.반환된 결과를 결합합니다.
$scoreFusion
파이프라인 의 상위 20 순위 결과인 첫 번째 20 문서를 출력합니다.