복합
정의
compound
compound
연산자는 두 개 이상의 연산자를 단일 쿼리로 결합합니다.compound
쿼리의 각 요소를 절이라고 하며, 각 절은 하나 이상의 하위 쿼리로 구성됩니다. Atlas Search는 지침이 포함된 샘플 복합 쿼리 템플릿을 제공합니다. 자세히 알아보려면 쿼리 지침 템플릿 보기를 참조하세요.
구문
compound
의 구문은 다음과 같습니다:
1 { 2 $search: { 3 "index": <index name>, // optional, defaults to "default" 4 "compound": { 5 <must | mustNot | should | filter>: [ { <clauses> } ], 6 "score": <options> 7 } 8 } 9 }
각 must
, mustNot
, should
및 filter
절은 하위 절의 배열을 포함합니다. 배열에 하위 절이 하나만 포함되어 있어도 배열 구문을 사용합니다. 이 페이지의 예시를 참조하세요.
옵션
compound
는 다음 용어를 사용하여 쿼리를 구성합니다:
문서가 결과에 포함되기 위해 일치해야 하는 절입니다. 반환되는 점수는 해당 절에 있는 모든 하위 쿼리의 점수 합계입니다.
| ||||||||||||||||
결과에 문서가 포함되려면 일치하지 않아야 하는 절입니다.
| ||||||||||||||||
결과에 포함된 문서에서 일치시키려는 절입니다.
예시를 참조하세요.
복합 쿼리 내에서 | ||||||||||||||||
문서가 결과에 포함되기 위해 모두 일치해야 하는 절입니다. 예제예를 들어
대신
다른 필터 예시를 참조하세요. | ||||||||||||||||
score |
사용법
채점 동작
Atlas Search는 문서에서 일치하는 항목을 생성한 각 개별 조항에 대해 해당 문서가 받은 점수를 합산하여 결과 세트에서 문서에 점수를 매깁니다. must
및 should
절만 채점에 참여합니다. 결과 세트은 최고 점수에서 최저 점수 순으로 정렬됩니다.
다음 표는 점수에 기여하거나 기여하지 않는 compound
절을 보여줍니다.
절 | 점수에 기여함 | 점수에 기여하지 않음 |
---|---|---|
filter | ||
must | ||
mustNot | ||
should |
score
옵션을 사용해 전체 복합 쿼리의 점수를 높이거나 바꿀 수 있습니다. 전체 복합 점수를 바꾸는 예시는 아래의 복합 점수 예시를 참조하세요. 점수를 사용하여 각 절의 각 하위 쿼리에 대한 점수를 높이거나 변경할 수도 있습니다. 점수 수정에서 compound
연산자 절에서 변경된 점수의 예시를 확인할 수 있습니다.
예제
Atlas Search Playground 또는 Atlas 클러스터에서 다음 예시를 사용해 볼 수 있습니다.
샘플 컬렉션
이 페이지의 예제에서는 fruit
이라는 컬렉션을 사용하며, 이 컬렉션에는 다음 문서가 포함되어 있습니다:
1 { 2 "_id" : 1, 3 "type" : "apple", 4 "description" : "Apples come in several varieties, including Fuji, Granny Smith, and Honeycrisp.", 5 "category" : "nonorganic", 6 "in_stock" : false 7 }, 8 { 9 "_id" : 2, 10 "type" : "banana", 11 "description" : "Bananas are usually sold in bunches of five or six.", 12 "category" : "nonorganic", 13 "in_stock" : true 14 }, 15 { 16 "_id" : 3, 17 "type" : "pear", 18 "description" : "Bosc and Bartlett are the most common varieties of pears.", 19 "category" : "organic", 20 "in_stock" : true 21 }
샘플 인덱스
fruit
컬렉션에는 컬렉션의 모든 필드를 자동으로 인덱싱하고 기본 표준 분석기를 사용하는 동적 매핑 이 포함된 기본 인덱스가 있습니다.standard
분석기는 모든 단어를 소문자로 처리하고 일반적인 중지 단어("the", "a", "and",
등)는 무시합니다.
샘플 쿼리
다음 쿼리는 Atlas Search 쿼리의 $search
compound
연산자를 보여 줍니다.
must
및 mustNot
예제
다음 예에서는 must
절과 mustNot
절의 조합을 사용하여 쿼리를 구성합니다. must
절은 텍스트 연산자를 사용하여 description
필드에서 varieties
라는 용어를 검색합니다. 문서가 일치하려면 must
절을 충족해야 합니다. mustNot
절은 description
필드에서 apples
라는 용어에 대한 검색 작업을 수행합니다. 문서가 일치하려면 mustNot
절을 충족하면 안 됩니다.
1 db.fruit.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "must": [{ 6 "text": { 7 "query": "varieties", 8 "path": "description" 9 } 10 }], 11 "mustNot": [{ 12 "text": { 13 "query": "apples", 14 "path": "description" 15 } 16 }] 17 } 18 } 19 } 20 ])
위의 쿼리는 description
필드에 varieties
라는 단어가 포함되어 있고 apples
이 포함되어 있지 않기 때문에 _id: 3
가 포함된 문서를 반환합니다.
➤ Atlas Search Playground에서 사용해 보세요
must
및 should
예제
다음 쿼리는 must
를 사용하여 충족해야 하는 검색 조건을 지정하고 should
를 사용하여 Fuji
단어가 포함된 문서에 대한 기본 설정을 지정합니다.
minimumShouldMatch 예제
should
절이 여러 개 있는 쿼리에서 miniumumShouldMatch
옵션을 사용하여 결과를 반환하기 위해 일치해야 하는 최소 절 수를 지정할 수 있습니다.
다음 쿼리는 하나의 must
절과 두 개의 should
절이 있고 minimumShouldMatch
값은 1
입니다. 문서는 description
필드에 varieties
라는 용어와 더불어 Fuji
또는 Golden Delicious
중 하나를 포함해야 결과 세트에 포함될 수 있습니다.
1 db.fruit.aggregate([ 2 { 3 $search: { 4 "compound": { 5 "must": [{ 6 "text": { 7 "query": "varieties", 8 "path": "description" 9 } 10 }], 11 "should": [{ 12 "text": { 13 "query": "Fuji", 14 "path": "description" 15 } 16 }, 17 { 18 "text": { 19 "query": "Golden Delicious", 20 "path": "description" 21 } 22 }], 23 "minimumShouldMatch": 1 24 } 25 } 26 } 27 ])
_id: 1
이 있는 문서는 must
절과 두 개의 should
절 중 첫 번째 절과 일치합니다.
➤ Atlas Search Playground에서 사용해 보세요
filter
예제
filter
filter
절은 must
동일하게 동작하지만,filter
절이 반환된 문서의 점수에서 고려되지 않으므로 반환된 문서의 순서에 영향을 주지 않습니다.
중첩된 예제
다음 예제에서는 중첩된 compound
절을 사용하여 쿼리를 구성합니다. 이 예제의 경우 fruit
컬렉션에는 type
, category
및 in_stock
필드에 대한 인덱스가 있으며, 텍스트 필드는 기본 분석기를 사용합니다. 이 쿼리에서는 문서가 다음 should
절 중 하나만 충족해야 합니다.
type
필드에apple
이라는 단어를 입력합니다.category
필드에 용어organic
을 포함하고in_stock
필드에true
값을 갖습니다.
1 db.fruit.aggregate([ 2 { 3 $search: { 4 "compound": { 5 "should": [ 6 { 7 "text": { 8 "query": "apple", 9 "path": "type" 10 } 11 }, 12 { 13 "compound": { 14 "must": [ 15 { 16 "text": { 17 "query": "organic", 18 "path": "category" 19 } 20 }, 21 { 22 "equals": { 23 "value": true, 24 "path": "in_stock" 25 } 26 } 27 ] 28 } 29 } 30 ], 31 "minimumShouldMatch": 1 32 } 33 } 34 } 35 ])
결과의 문서는 포함을 위한 모든 요구 사항을 충족합니다.
_id: 3
이 있는 문서가 두 번째should
절 안에 중첩된must
절과 일치합니다._id: 1
이 있는 문서가 첫 번째should
절과 일치합니다.
➤ Atlas Search Playground에서 사용해 보세요