점수 수정
모든 운영자가 사용할 수 있는 점수 수정 옵션은 다음과 같습니다. 자세한 내용과 예시를 보려면 다음 옵션 중 하나를 클릭하세요.
boost
boost
옵션은 결과의 기본 점수에 지정된 숫자 또는 문서의 숫자 필드 값을 곱합니다. 예를 들어, boost
를 사용하면 결과에서 일치하는 특정 문서의 중요도를 높일 수 있습니다.
필드
boost
옵션은 다음 필드를 사용합니다.
필드 | 유형 | 필요성 | 설명 |
---|---|---|---|
| float | 조건부 | 기본 점수에 곱할 숫자입니다. 값은 양수여야 합니다. |
| 문자열 | 조건부 | 기본 점수에 곱할 값의 숫자 필드 이름입니다. |
| float | 옵션 |
|
예시
다음 예시에서는 sample_mflix
데이터베이스의 movies
컬렉션을 사용합니다. 클러스터에 샘플 데이터세트가 있는 경우 Atlas Search default
인덱스를 만들고 클러스터에서 예시 쿼리를 실행할 수 있습니다.
샘플 복합 쿼리는 한 검색 기준의 중요도를 다른 검색 기준보다 높이는 방법을 보여줍니다. 쿼리에는 title
및 score
이외의 모든 필드를 제외하는 $project
단계가 포함되어 있습니다.
다음 예시에서는 복합 연산자가 텍스트 연산자를 사용하여 plot
및 title
필드에서 Helsinki
라는 용어를 검색합니다. title
필드에 대한 쿼리는 boost
옵션과 함께 score
을 사용하여 value
필드에 지정된 대로 점수 결과에 3을 곱합니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "should": [{ 6 "text": { 7 "query": "Helsinki", 8 "path": "plot" 9 } 10 }, 11 { 12 "text": { 13 "query": "Helsinki", 14 "path": "title", 15 "score": { "boost": { "value": 3 } } 16 } 17 }] 18 } 19 } 20 }, 21 { 22 "$limit": 5 23 }, 24 { 25 "$project": { 26 "_id": 0, 27 "title": 1, 28 "plot": 1, 29 "score": { "$meta": "searchScore" } 30 } 31 } 32 ])
이 쿼리는 쿼리 용어와 일치하는 title
문서의 점수에 기본 값에서 3
을(를) 곱한 다음 결과를 반환합니다.
[ { plot: 'Epic tale about two generations of men in a wealthy Finnish family, spanning from the 1960s all the way through the early 1990s. The father has achieved his position as director of the ...', title: 'Kites Over Helsinki', score: 12.2470121383667 }, { plot: 'Alex is Finlander married to an Italian who works as a taxi driver in Berlin. One night in his taxi come two men with a briefcase full of money. Unluckily for Alex, they are being chased by...', title: 'Helsinki-Naples All Night Long', score: 9.56808090209961 }, { plot: 'The recession hits a couple in Helsinki.', title: 'Drifting Clouds', score: 4.5660295486450195 }, { plot: 'Two teenagers from Helsinki are sent on a mission by their drug dealer.', title: 'Sairaan kaunis maailma', score: 4.041563034057617 }, { plot: 'A murderer tries to leave his criminal past in East Helsinki and make a new life for his family', title: 'Bad Luck Love', score: 3.6251673698425293 } ]
다음 예시에서 복합 연산자는 텍스트 연산자를 사용하여 plot
및 title
필드에서 Helsinki
라는 용어를 검색합니다. title
필드에 대한 쿼리는 boost
옵션과 함께 score
를 사용하여 path
내의 숫자 필드인 imdb.rating
으로 점수 결과를 곱합니다. 지정된 path
에서 숫자 필드를 찾을 수 없는 경우 연산자는 문서의 점수를 3
으로 곱합니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "should": [{ 6 "text": { 7 "query": "Helsinki", 8 "path": "plot" 9 } 10 }, 11 { 12 "text": { 13 "query": "Helsinki", 14 "path": "title", 15 "score": { 16 "boost": { 17 "path": "imdb.rating", 18 "undefined": 3 19 } 20 } 21 } 22 }] 23 } 24 } 25 }, 26 { 27 "$limit": 5 28 }, 29 { 30 "$project": { 31 "_id": 0, 32 "title": 1, 33 "plot": 1, 34 "score": { "$meta": "searchScore" } 35 } 36 } 37 ])
이 쿼리는 문서에 필드가 없는 경우 title
필드가 쿼리 용어와 일치하는 문서의 점수를 기본 값에서 숫자 필드 imdb.rating
또는 3
값으로 곱한 다음 결과를 반환합니다.
[ { plot: 'Epic tale about two generations of men in a wealthy Finnish family, spanning from the 1960s all the way through the early 1990s. The father has achieved his position as director of the ...', title: 'Kites Over Helsinki', score: 24.902257919311523 }, { plot: 'Alex is Finlander married to an Italian who works as a taxi driver in Berlin. One night in his taxi come two men with a briefcase full of money. Unluckily for Alex, they are being chased by...', title: 'Helsinki-Naples All Night Long', score: 20.411907196044922 }, { plot: 'The recession hits a couple in Helsinki.', title: 'Drifting Clouds', score: 4.5660295486450195 }, { plot: 'Two teenagers from Helsinki are sent on a mission by their drug dealer.', title: 'Sairaan kaunis maailma', score: 4.041563034057617 }, { plot: 'A murderer tries to leave his criminal past in East Helsinki and make a new life for his family', title: 'Bad Luck Love', score: 3.6251673698425293 } ]
constant
constant
옵션은 기본 점수를 지정된 숫자로 대체합니다.
참고
constant
및 boost
옵션을 함께 사용하면 안 됩니다.
예시
다음 예에서는 sample_mflix.movies
컬렉션에 대한 기본 인덱스와 복합 연산자를 활용하여 plot
및 title
필드를 쿼리합니다. 쿼리에서 텍스트 연산자는 constant
옵션과 함께 score
를 사용하여 title
필드에 대한 쿼리와 일치하는 결과에서만 모든 점수 결과를 5
로 바꿉니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "should": [{ 6 "text": { 7 "query": "tower", 8 "path": "plot" 9 } 10 }, 11 { 12 "text": { 13 "query": "tower", 14 "path": "title", 15 "score": { "constant": { "value": 5 } } 16 } 17 }] 18 } 19 } 20 }, 21 { 22 "$limit": 5 23 }, 24 { 25 "$project": { 26 "_id": 0, 27 "title": 1, 28 "plot": 1, 29 "score": { "$meta": "searchScore" } 30 } 31 } 32 ])
위의 쿼리는 다음 결과를 반환하며, title
필드에 대한 쿼리와 일치하는 문서의 점수만 지정된 constant
값으로 대체됩니다.
1 [ 2 { 3 plot: 'Several months after witnessing a murder, residents of Tower Block 31 find themselves being picked off by a sniper, pitting those lucky enough to be alive into a battle for survival.', 4 title: 'Tower Block', 5 score: 8.15460205078125 6 }, 7 { 8 plot: "When a group of hard-working guys find out they've fallen victim to their wealthy employer's Ponzi scheme, they conspire to rob his high-rise residence.", 9 title: 'Tower Heist', 10 score: 5 11 }, 12 { 13 plot: 'Toru Kojima and his friend Koji are young student boys with one thing in common - they both love to date older women. Koji is a playboy with several women, young and older, whereas Toru is a romantic with his heart set on on certain lady.', 14 title: 'Tokyo Tower', 15 score: 5 16 }, 17 { 18 plot: 'A middle-aged mental patient suffering from a split personality travels to Italy where his two personalities set off all kinds of confusing developments.', 19 title: 'The Leaning Tower', 20 score: 5 21 }, 22 { 23 plot: 'A documentary that questions the cost -- and value -- of higher education in the United States.', 24 title: 'Ivory Tower', 25 score: 5 26 } 27 ]
embedded
참고
이 옵션은 embeddedDocument 연산자에서만 사용할 수 있습니다.
embedded
옵션을 사용하여 다음에 대한 방법을 구성할 수 있습니다.
일치하는 여러 내장된 문서의 점수를 집계합니다.
일치하는 내장된 문서의 점수를 집계한 후 embeddedDocument 연산자의 점수를 수정합니다.
참고
Atlas Search embeddedDocuments 유형, embeddedDocument 연산자 및 embedded
점수 옵션이 미리 보기로 제공됩니다. 복제본 세트 또는 단일 MongoDB 샤드 의 Atlas Search 인덱스 가 2,100,000,000 인덱스 객체에 도달하면 Atlas Search 는 인덱스 를 오래된 쿼리 가능 상태 로 전환합니다. 향후 Atlas Search 에서 2 100, ,000, 이상의 인덱스000 객체를 지원 하려면 MongoDB 피드백 엔진에서 이 요청 에 투표하세요.
필드
embedded
옵션은 다음 필드를 사용합니다.
필드 | 유형 | 필요성 | 설명 |
---|---|---|---|
| 문자열 | 옵션 | 일치하는 내장된 문서의 점수를 결합하는 방법을 구성합니다. 값은 다음 집계 전략 중 하나여야 합니다:
이 필드를 생략하면 기본값은 |
| 옵션 | 집계 전략을 적용한 후 적용할 점수 수정을 지정합니다. |
예시
다음 예제에서는 sample_analytics.transactions
컬렉션의 default
인덱스를 사용합니다. 이 인덱스는 transactions
배열의 문서에 대해 embeddedDocuments
유형을 구성하고 transactions.symbol
및 transactions.transaction_code
필드에 대해 string
유형을 구성합니다.
예시
{ "mappings": { "dynamic": true, "fields": { "transactions": { "dynamic": true, "fields": { "symbol": { "type": "string" }, "transaction_code": { "type": "string" } }, "type": "embeddedDocuments" } } } }
문서 배열이 포함된 transactions
필드에 대한 샘플 쿼리에는 출력을 10
개의 결과로 제한하는 $limit
단계, 그리고 $project
단계가 포함되어 있습니다.
account_id
와transaction_count
이외의 모든 필드를 제외합니다.집계 전략과 추가 점수 수정을 적용하는
score
필드를 추가합니다.참고
embeddedDocument 연산자
operator
의score
옵션 내에서function
을 사용할 수 있습니다. 그러나path
옵션이 필요한 함수 점수 표현식의 경우 표현식의path
로 지정하는 숫자 필드가 embeddedDocument 연산자의path
안에 있어야 합니다. 예를 들어 다음 예시 쿼리에서 24번째 줄의compound
연산자의score
옵션 안에 지정된transactions.amount
필드는 4번째 줄의embeddedDocument
연산자의 경로transactions
안에 있습니다.
이 쿼리는 AMD
를 구매한 계정을 검색하고 가장 큰 단일 AMD
구매(주식 수 기준)에 해당 계정이 이 기간 동안 수행한 트랜잭션 수의 log1p
값을 곱합니다. 다음을 기준으로 계정의 순위를 매깁니다.
단일 트랜잭션에서 구매한
AMD
개수마지막 기간의 트랜잭션 수
1 db.transactions.aggregate({ 2 "$search": { 3 "embeddedDocument": { 4 "path": "transactions", 5 "operator": { 6 "compound": { 7 "must": [ 8 { 9 "text": { 10 "path": "transactions.symbol", 11 "query": "amd" 12 } 13 }, 14 { 15 "text": { 16 "path": "transactions.transaction_code", 17 "query": "buy" 18 } 19 } 20 ], 21 "score": { 22 "function": { 23 "path": { 24 "value": "transactions.amount", 25 "undefined": 1.0 26 } 27 } 28 } 29 } 30 }, 31 "score": { 32 "embedded": { 33 "aggregate": "maximum", 34 "outerScore": { 35 "function": { 36 "multiply": [ 37 { 38 "log1p": { 39 "path": { 40 "value": "transaction_count" 41 } 42 } 43 }, 44 { 45 "score": "relevance" 46 } 47 ] 48 } 49 } 50 } 51 } 52 } 53 } 54 }, 55 { "$limit": 10 }, 56 { 57 "$project": { 58 "_id": 0, 59 "account_id": 1, 60 "transaction_count": 1, 61 "score": { $meta: "searchScore" } 62 } 63 })
Atlas Search는 지난 기간에 거래를 많이 하고 단일 트랜잭션으로 AMD
구매를 많이 한 계정의 순위를 높게 매깁니다.
1 [ 2 { account_id: 467651, transaction_count: 99, score: 19982 }, 3 { account_id: 271554, transaction_count: 96, score: 19851.822265625 }, 4 { account_id: 71148, transaction_count: 99, score: 19840 }, 5 { account_id: 408143, transaction_count: 100, score: 19836.76953125 }, 6 { account_id: 977774, transaction_count: 98, score: 19822.64453125 }, 7 { account_id: 187107, transaction_count: 96, score: 19754.470703125 }, 8 { account_id: 492843, transaction_count: 97, score: 19744.998046875 }, 9 { account_id: 373169, transaction_count: 93, score: 19553.697265625 }, 10 { account_id: 249078, transaction_count: 89, score: 19436.896484375 }, 11 { account_id: 77690, transaction_count: 90, score: 19418.017578125 } 12 ]
function
function
옵션을 사용하면 숫자 필드를 사용하여 문서의 최종 점수를 변경할 수 있습니다. 표현식 을 통해 최종 점수를 계산하기 위한 숫자 필드를 지정할 수 있습니다. 함수 점수의 최종 결과가 0
미만인 경우 Atlas Search는 점수를 0
로 대체합니다.
참고
embeddedDocument 연산자의 operator
의 score
옵션 안에 function
을 사용할 수 있습니다. 그러나 path
옵션이 필요한 함수 점수 표현식의 경우, 표현식의 path
로 지정하는 숫자 필드가 embeddedDocument 연산자의 path
안에 있어야 합니다.
표현식
문서의 최종 점수를 변경하려면 function
옵션과 함께 다음 표현식을 사용하세요.
산술 표현식: 일련의 숫자를 더하거나 곱하는 표현식
상수 표현식: 함수 점수에 상수를 허용하는 표현식
가우스 감쇠 표현식: 지정된 비율로 곱하여 점수를 감쇠 또는 감소시키는 표현식
경로 표현식: 인덱싱된 숫자 필드 값을 함수 점수에 통합하는 표현식
점수 표현식: Atlas Search에서 할당된 관련성 점수를 반환하는 표현식
단항 표현식: 단일 인수를 사용하는 표현식. Atlas Search에서는 지정된 숫자의 log10(x) 또는 log10(x+1)을 계산할 수 있습니다.
참고
Atlas Search 함수 점수는 항상 float
값이며, 너무 크거나 작은 숫자의 경우 정밀도가 손실될 수 있습니다.
산술 표현식은 일련의 숫자를 더하거나 곱하는 연산식입니다. 예를 들어, 산술 표현식을 사용하여 데이터 인리치먼트 파이프라인의 숫자 필드를 통해 관련성 순위를 변경할 수 있습니다. 다음 옵션 중 하나를 포함해야 합니다:
옵션 | 유형 | 설명 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 일련의 숫자를 추가합니다. 음수 값을 가질 수 있는 표현식 배열 을 사용합니다. 배열 길이는 이상이어야 산술 표현식 구문
이전 예에서 Atlas Search는
| |||||||||||||||||
| 일련의 숫자를 곱합니다. 음수 값을 가질 수 있는 표현식 배열 을 사용합니다. 배열 길이는 이상이어야 산술 표현식 구문
이전 예시에서 Atlas Search는
|
참고
undefined
으로 평가되는 산술 표현식을 상수 값으로 바꿀 수 없습니다.
상수 표현식을 사용하면 함수 점수에 상수 를 사용할 수 있습니다. 예를 들어 constant
를 사용하여 데이터 인리치먼트 파이프라인의 숫자 값을 통해 관련성 순위를 수정할 수 있습니다. 여기에는 다음 옵션이 포함되어야 합니다.
옵션 | 유형 | 설명 |
---|---|---|
| float | 고정된 값을 나타내는 숫자입니다. Atlas Search는 음수 값을 지원합니다. |
예시
{ "function": { "constant": -23.78 } }
가우스 감쇠 표현식을 사용하면 지정된 원점에서 숫자 필드 값의 거리를 기준으로 문서의 최종 점수를 감쇠하거나 곱하여 줄일 수 있습니다. decay
은 다음과 같이 계산됩니다.
여기서 시그마는 점수가 origin±offset
에서 거리 scale
에 있는 decay
값을 취하도록 보장하기 위해 계산됩니다.
예를 들어 gauss
를 사용하여 문서 최신성이나 더 높은 순위에 영향을 미치는 날짜를 기준으로 문서의 관련 점수를 조정할 수 있습니다. gauss
은 다음 옵션을 사용합니다.
필드 | 유형 | 필요성 | 설명 |
---|---|---|---|
| double | 옵션 | 점수를 곱하려는 비율입니다. 값은 숫자 필드 값( |
| double | 옵션 | 원점으로부터의 거리를 결정하는 데 사용하는 숫자입니다. 감쇠 작업은 거리가 |
| double | 필수 사항 | 거리를 계산할 원점입니다. |
| 필수 사항 | 기본 점수를 곱하는 데 사용할 값이 있는 숫자 필드의 이름입니다. | |
| double | 필수 사항 | 점수를 곱해야 하는 |
예시
{ "function": { "gauss": { "path": { "value": "rating", "undefined": 50 }, "origin": 95, "scale": 5, "offset": 5, "decay": 0.5 } } }
최대 평점이 100
이라고 가정합니다. Atlas Search는 문서의 rating
필드를 사용하여 점수를 감쇠시킵니다.
등급이
90
~100
사이인 문서에 대해 현재 점수를 유지합니다.등급이
90
미만인 문서에 대해 현재 점수에0.5
을 곱합니다.등급이
85
보다 낮은 문서에 대해 현재 점수에0.25
을 곱합니다.
경로 표현식은 인덱싱된 숫자 필드 값을 함수 점수에 통합합니다. string
또는 object
일 수 있습니다.
string
인 경우 값은 경로 표현식을 검색할 숫자 필드의 이름입니다.
예시
{ "function": { "path": "rating" } }
Atlas Search는 문서의 최종 점수에 rating
필드의 숫자 값을 통합합니다.
object
의 경우 경로 표현식에 다음 옵션이 사용됩니다.
옵션 | 유형 | 필요성 | 설명 |
---|---|---|---|
| 문자열 | 필수 사항 | 숫자 필드 이름입니다. 필드에 음수 값을 포함할 수 있습니다. |
| float | 옵션 |
|
예시
{ "function": { "path": {"value": "quantity", "undefined": 2} } }
Atlas Search는 문서에 quantity
필드가 없을 경우 최종 점수 계산에 quantity
필드 또는 2
의 숫자 값을 포함합니다.
점수 표현식은 관련성 점수를 나타내며, 이는 Atlas Search가 쿼리의 관련성에 따라 문서에 할당하는 점수입니다. 문서의 현재 점수와 동일합니다. 다음 옵션이 포함되어야 합니다.
옵션 | 유형 | 설명 |
---|---|---|
| 문자열 | 쿼리의 관련성 점수 값입니다. 값은 |
예시
{ "function": { "score": "relevance" } }
단항 표현식은 단일 인수를 사용하는 표현식입니다. Atlas Search에서는 단항 표현식을 사용하여 지정된 수의 log10(x) 또는 log10(x+1)를 계산할 수 있습니다. 예를 들어 log1p
를 사용하여 문서 인기도 점수로 관련성 점수에 영향을 줄 수 있습니다. 다음 옵션 중 하나를 포함해야 합니다.
옵션 | 유형 | 설명 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 숫자의 로그10 를 계산합니다. 예시: 단항 표현식 구문
이전 예시에서 Atlas Search는
단항 표현식 구문
이전 예시에서 Atlas Search는 상수 표현식 | |||||||||||||||||||
| 숫자에 단항 표현식 구문
이전 예시에서 Atlas Search는 |
예시
다음 예시에서는 sample_mflix.movies
컬렉션의 기본 인덱스를 사용하여 title
필드를 쿼리합니다. 샘플 쿼리에는 출력을 5
개의 결과로 제한하는 $limit
단계와 title
및 score
를 제외한 모든 필드를 제외하는 $project
단계가 포함됩니다.
예시
이 예에서 텍스트 연산자는 score
와 function
옵션을 사용하여 다음을 곱합니다:
문서의
imdb.rating
필드의 값에 해당하는 경로 표현식의 숫자 값이며,imdb.rating
필드가 문서에 없는 경우2
값입니다.관련성 점수 또는 문서의 현재 점수
db.movies.aggregate([{ "$search": { "text": { "path": "title", "query": "men", "score": { "function":{ "multiply":[ { "path": { "value": "imdb.rating", "undefined": 2 } }, { "score": "relevance" } ] } } } } }, { $limit: 5 }, { $project: { "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } }])
이 쿼리는 점수가 지정된 function
값으로 대체된 다음 결과를 반환합니다.
{ "title" : "Men...", "score" : 23.431293487548828 } { "title" : "12 Angry Men", "score" : 22.080968856811523 } { "title" : "X-Men", "score" : 21.34803581237793 } { "title" : "X-Men", "score" : 21.34803581237793 } { "title" : "Matchstick Men", "score" : 21.05954933166504 }
예시
다음 예제에서 텍스트 연산자는 score
function
옵션과 함께 사용하여 문서의 현재 점수를 상수 숫자 값 3
로 바꿉니다.
db.movies.aggregate([ { "$search": { "text": { "path": "title", "query": "men", "score": { "function":{ "constant": 3 } } } } }, { $limit: 5 }, { $project: { "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } } ])
이 쿼리는 점수가 지정된 function
값으로 대체된 다음 결과를 반환합니다.
{ "title" : "Men Without Women", "score" : 3 } { "title" : "One Hundred Men and a Girl", "score" : 3 } { "title" : "Of Mice and Men", "score" : 3 } { "title" : "All the King's Men", "score" : 3 } { "title" : "The Men", "score" : 3 }
예시
다음 예제에서 텍스트 연산자는 score
와 function
옵션을 함께 사용하여 결과에서 문서의 관련성 점수를 감소시킵니다.
이 쿼리는 imdb.rating
필드 값 또는 4.6
인 문서의 경우 imdb.rating
필드가 문서에 없는 경우 origin
로부터의 거리가 5
인 scale
거리가 되도록 지정합니다. 9.5
, 더하기 또는 빼기 offset
즉 0
인 경우 Atlas Search 는 0.5
에서 시작하는 decay
를 사용하여 점수를 곱해야 합니다. 이 쿼리에는 출력을 최대 10
결과로 제한하는 $limit
단계와 결과에 imdb.rating
필드를 추가하는 $project
단계가 포함되어 있습니다.
db.movies.aggregate([ { "$search": { "text": { "path": "title", "query": "shop", "score": { "function":{ "gauss": { "path": { "value": "imdb.rating", "undefined": 4.6 }, "origin": 9.5, "scale": 5, "offset": 0, "decay": 0.5 } } } } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "imdb.rating": 1, "score": { "$meta": "searchScore" } } } ])
이 쿼리는 다음과 같은 결과를 반환합니다:
[ { title: 'The Shop Around the Corner', imdb: { rating: 8.1 }, score: 0.9471074342727661 }, { title: 'Exit Through the Gift Shop', imdb: { rating: 8.1 }, score: 0.9471074342727661 }, { title: 'The Shop on Main Street', imdb: { rating: 8 }, score: 0.9395227432250977 }, { imdb: { rating: 7.4 }, title: 'Chop Shop', score: 0.8849083781242371 }, { title: 'Little Shop of Horrors', imdb: { rating: 6.9 }, score: 0.8290896415710449 }, { title: 'The Suicide Shop', imdb: { rating: 6.1 }, score: 0.7257778644561768 }, { imdb: { rating: 5.6 }, title: 'A Woman, a Gun and a Noodle Shop', score: 0.6559237241744995 }, { title: 'Beauty Shop', imdb: { rating: 5.4 }, score: 0.6274620294570923 } ]
이전 쿼리에서 사용된 가우스 표현식의 결과와 Atlas Search 결과에 반환된 관련성 점수를 비교하려면 다음 쿼리를 실행합니다.
db.movies.aggregate([ { "$search": { "text": { "path": "title", "query": "shop" } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "imdb.rating": 1, "score": { "$meta": "searchScore" } } } ])
이 쿼리는 다음과 같은 결과를 반환합니다:
[ { title: 'Beauty Shop', imdb: { rating: 5.4 }, score: 4.111973762512207 }, { imdb: { rating: 7.4 }, title: 'Chop Shop', score: 4.111973762512207 }, { title: 'The Suicide Shop', imdb: { rating: 6.1 }, score: 3.5363259315490723 }, { title: 'Little Shop of Horrors', imdb: { rating: 6.9 }, score: 3.1020588874816895 }, { title: 'The Shop Around the Corner', imdb: { rating: 8.1 }, score: 2.762784481048584 }, { title: 'The Shop on Main Street', imdb: { rating: 8 }, score: 2.762784481048584 }, { title: 'Exit Through the Gift Shop', imdb: { rating: 8.1 }, score: 2.762784481048584 }, { imdb: { rating: 5.6 }, title: 'A Woman, a Gun and a Noodle Shop', score: 2.0802340507507324 } ]
예시
다음 예시에서 text 연산자는 문서에 imdb.rating
필드가 없는 경우 score
를 function
옵션과 함께 사용하여 쿼리의 관련성 점수를 숫자 필드 imdb.rating
의 값 또는 4.6
으로 바꿉니다.
db.movies.aggregate([{ "$search": { "text": { "path": "title", "query": "men", "score": { "function":{ "path": { "value": "imdb.rating", "undefined": 4.6 } } } } } }, { $limit: 5 }, { $project: { "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } }])
이 쿼리는 점수가 지정된 function
값으로 대체된 다음 결과를 반환합니다.
{ "title" : "12 Angry Men", "score" : 8.899999618530273 } { "title" : "The Men Who Built America", "score" : 8.600000381469727 } { "title" : "No Country for Old Men", "score" : 8.100000381469727 } { "title" : "X-Men: Days of Future Past", "score" : 8.100000381469727 } { "title" : "The Best of Men", "score" : 8.100000381469727 }
예시
다음 예에서 텍스트 연산자는 score
를 function
옵션과 함께 사용하여 문서의 관련성 점수(현재 점수와 동일함)를 반환합니다.
db.movies.aggregate([{ "$search": { "text": { "path": "title", "query": "men", "score": { "function":{ "score": "relevance" } } } } }, { "$limit": 5 }, { "$project": { "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } }])
이 쿼리는 점수가 지정된 function
값으로 대체된 다음 결과를 반환합니다.
{ "title" : "Men...", "score" : 3.4457783699035645 } { "title" : "The Men", "score" : 2.8848698139190674 } { "title" : "Simple Men", "score" : 2.8848698139190674 } { "title" : "X-Men", "score" : 2.8848698139190674 } { "title" : "Mystery Men", "score" : 2.8848698139190674 }
예시
다음 예시에서 text 연산자는 문서에 imdb.rating
필드가 없는 경우 score
를 function
옵션과 함께 사용하여 imdb.rating
또는 10
의 log10을 계산합니다.
db.movies.aggregate([{ "$search": { "text": { "path": "title", "query": "men", "score": { "function": { "log": { "path": { "value": "imdb.rating", "undefined": 10 } } } } } } }, { "$limit": 5 }, { "$project": { "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } }])
이 쿼리는 점수가 지정된 function
값으로 대체된 다음 결과를 반환합니다.
{ "title" : "12 Angry Men", "score" : 0.9493899941444397 } { "title" : "The Men Who Built America", "score" : 0.9344984292984009 } { "title" : "No Country for Old Men", "score" : 0.9084849953651428 } { "title" : "X-Men: Days of Future Past", "score" : 0.9084849953651428 } { "title" : "The Best of Men", "score" : 0.9084849953651428 }