Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

$scoreFusion (집계)

중요

$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 은(는) 다음 필드를 사용합니다.

필드
유형
설명

input

객체

$scoreFusion 가 결합하는 입력을 정의합니다.

input.pipelines

객체

해당 파이프라인 정의하는 집계 단계에 대한 파이프라인 이름 맵이 포함되어input.pipelines 있습니다. 에는 파이프라인 하나 이상 포함되어야 합니다.$score 입력 파이프라인 점수를 반환하지 않는 경우 입력 파이프라인 에 를 지정해야 합니다. 모든 파이프라인은 동일한 컬렉션 에서 작동해야 하며 고유한 이름을 가져야 합니다.

입력 파이프라인 제한 사항에 대한 자세한 내용은 입력 파이프라인입력 파이프라인 이름을 참조하세요.

input.normalization

문자열

결과를 결합하기 전에 점수를 0 ~ 1 범위 로 정규화합니다. 값은 다음과 같습니다.

  • none - 정규화하지 않습니다.

  • sigmoid - 표현식 적용 $sigmoid .

  • minMaxScaler - 창 연산자 적용 $minMaxScaler .

combination

객체

선택 사항. input 파이프라인 결과를 결합하는 방법을 정의합니다.

combination.weights

객체

선택 사항. 결과를 결합할 때 정규화된 입력 파이프라인 점수에 적용 할 가중치입니다. 파이프라인 라인에 해당합니다. 파이프라인의 가중치가 지정되지 않은 경우 기본값 가중치는 1 입니다. 각 가중치 값은 음수가 아닌 숫자(정수 또는 소수)여야 합니다. 가중치는 0일 수 있습니다.

combination.method

문자열

선택 사항. 점수를 결합하는 방법을 지정합니다. 값은 다음과 같습니다.

  • avg - 입력 점수의 평균을 계산합니다.

  • expression - combination.expression 필드 에 지정한 사용자 지정 집계 표현식 적용 .

생략하는 경우 기본값은 avg입니다.

combination.expression

산술 표현식

선택 사항. 입력 점수를 결합하는 로직을 지정합니다. 이는 combination.methodexpression로 설정하다 경우 사용되는 사용자 지정 표현식 입니다. 표현식 내에서 입력 파이프라인 의 이름을 사용하여 문서 의 해당 입력 점수를 나타냅니다.

combination.weights와 상호 배타적입니다.

scoreDetails

부울

선택 사항. 각 입력 파이프라인 의 자세한 점수 정보를 출력 문서의 메타데이터 에 포함할지 여부를 지정합니다. 생략하면 기본값 false입니다.

$scoreFusion 는 단일 컬렉션 에만 사용할 수 있습니다. 데이터베이스 범위에서는 이 집계 단계를 사용할 수 없습니다.

$scoreFusion 최종 출력에서 여러 입력 파이프라인에서 결과의 중복을 제거합니다. 각 고유 입력 문서 입력 파이프라인 출력에 문서 나타나는 횟수에 관계없이 $scoreFusion 출력에 최대 한 번 표시됩니다.

input 파이프라인 선택 파이프라인인 동시에 채점 파이프라인이어야 합니다.

선택 파이프라인은 검색 후 수정을 수행하지 않고 컬렉션 에서 문서 설정하다 검색합니다. $scoreFusion 은(는) 서로 다른 입력 파이프라인의 문서를 비교하므로 모든 입력 파이프라인이 수정되지 않은 동일한 문서를 출력해야 합니다.

선택 파이프라인 다음 단계만 포함되어야 합니다.

유형
단계

검색 단계

  • $match,$match 레거시 텍스트 검색 사용하는 포함 $geoNear

  • $search

  • $vectorSearch

    참고

    선택 파이프라인 에서 $geoNear 를 사용하는 경우 includeLogs 또는 distanceField 필드가 문서를 수정하므로 지정할 수 없습니다.

주문 단계

페이지 매김 단계

점수 파이프라인 문서 점수에 따라 문서를 정렬하거나 정렬합니다. $scoreFusion 은(는) 점수가 매겨진 파이프라인 결과의 순서를 사용하여 출력 점수에 영향을 줍니다. 점수 산정 파이프라인은 다음 기준 중 하나를 충족해야 합니다.

  • 다음의 순서가 지정된 단계 중 하나부터 시작합니다.

  • 이전 파이프라인 본질적으로 점수를 반환하지 않는 경우 명시적 $score 단계를 포함합니다.

input 의 파이프라인 이름은 다음 제한 사항을 충족해야 합니다.

  • 빈 문자열이 아니어야 합니다.

  • 다음으로 시작하면 안 됩니다. $

  • 문자열의 어느 곳에도 ASCII null 문자 구분 기호 \0 를 포함하지 않아야 합니다.

  • 다음을 포함해서는 안 됩니다. .

scoreDetails 을(를) true(으)로 설정하다 $scoreFusion 이(가) 각 문서 에 대해 scoreDetails 메타데이터 필드 생성합니다. scoreDetails 필드 에는 최종 순위에 대한 정보가 포함되어 있습니다.

참고

scoreDetails 을(를) true(으)로 설정하다 $scoreFusion 이(가) 각 문서 에 대해 scoreDetails 메타데이터 필드 설정합니다. 기본값 으로 scoreDetails 메타필드를 자동으로 출력하지 않습니다.

메타데이터 필드 보려면 scoreDetails , 또는 와 $project $addFields같은 단계에서 $meta 표현식 통해 명시적으로 설정하다 해야 $set 합니다.

scoreDetails 필드 에는 다음과 같은 하위 필드가 포함되어 있습니다.

필드
설명

value

이 문서 에 대한 점수의 숫자 값입니다.

description

$scoreFusion 이(가) 최종 점수를 계산한 방법에 대한 설명입니다.

normalization

점수를 정규화하는 데 사용되는 정규화 메서드입니다.

combination

파이프라인 결과를 결합하는 데 사용되는 결합 메서드 및 표현식 .

details

각 배열 항목에 이 문서 출력하는 입력 파이프라인에 대한 정보가 포함된 배열 입니다.

details 필드 의 각 배열 항목에는 다음 하위 필드가 포함되어 있습니다.

필드
설명

inputPipelineName

이 문서 출력하는 입력 파이프라인 의 이름입니다.

inputPipelineRawScore

정규화 전 파이프라인 의 문서 점수입니다.

weight

입력 파이프라인 의 가중치입니다.

value

선택 사항. 입력 파이프라인 이 문서 에 대해 { $meta: 'score' } 를 출력하면 value{ $meta: 'score' }가 포함됩니다.

details

입력 파이프라인 의 scoreDetails 필드 . 입력 파이프라인 scoreDetails 필드 출력하지 않는 경우 이 필드 빈 배열 입니다.

경고

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 최종 결과를 구성하는 데 사용하는 기본 집계 단계의 전체 실행을 보여줍니다.

이 예시 임베딩 및 텍스트 필드가 있는 컬렉션 사용합니다. 컬렉션 에 searchvectorSearch 유형 인덱스를 만듭니다.

다음 인덱스 정의는 인덱싱된 필드에 대해 쿼리를 실행 위해 컬렉션 에서 동적으로 인덱싱할 수 있는 모든 필드를 자동으로 인덱싱합니다.$search

검색 인덱스
db.embedded_movies.createSearchIndex(
"<INDEX_NAME>",
{
mappings: { dynamic: true }
}
)

다음 인덱스 정의는 해당 필드 에 대해 쿼리를 실행 위해 컬렉션 의 임베딩이 $vectorSearch 있는 필드 를 인덱싱합니다.

vectorSearch 인덱스
db.embedded_movies.createSearchIndex(
"<INDEX_NAME>",
"vectorSearch",
{
"fields": [
{
"type": "vector",
"path": "<FIELD_NAME>",
"numDimensions": <NUMBER_OF_DIMENSIONS>,
"similarity": "dotProduct"
}
]
}
);

다음 집계 파이프라인 다음 입력 파이프라인과 함께 $scoreFusion 을(를) 사용합니다.

파이프라인
반환된 문서 수
설명

searchOne

20

임베딩으로 지정된 텀 에 대해 vector 유형으로 인덱싱된 필드 에서 벡터 검색 실행합니다. 이 쿼리 최대 500 개의 가장 가까운 이웃을 고려하지만 결과를 20 개의 문서로 제한합니다.

searchTwo

20

동일한 텀 에 대해 전체 텍스트 검색 실행하고 결과를 20 개 문서로 제한합니다.

1db.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 문서를 출력합니다.

돌아가기

$score

이 페이지의 내용