span
정의
참고
span
연산자는 더 이상 사용되지 않습니다. 대신 구문 연산자를 사용하세요.
span
span
연산자는 텍스트 필드의 리전 내에서 Atlas Search가 일치하는 텍스트를 찾습니다. 이 기능을 사용하여 지정된 정밀도까지 서로 가까이 있는 문자열을 찾을 수 있습니다.span
연산자는 쿼리가 위치 정보를 추적해야 하기 때문에 다른 연산자보다 계산 집약적입니다.span
는 텀 수준 연산자이므로query
필드는 분석되지 않습니다.query
필드가 특수 문자가 포함된 단일 용어로 처리되기 때문에 용어 수준 연산자는 키워드 분석기 에서 잘 작동합니다.span
쿼리는 점수별로 순위가 매겨지지 않습니다.
구문
span
의 구문은 다음과 같습니다:
{ $search: { "index": <index name>, // optional, defaults to "default" "span": { "term" | <positional-operator>": { <operator-specification> } } } }
참고
span
검색 쿼리는 복합 연산자 를 사용할 수 없습니다.
용어 연산자
term
연산자를 사용하여 Atlas Search에 용어를 지정할 수 있습니다. term
연산자는 필수이며 span
위치 연산자와 함께 사용하는 경우 위치 연산자의 가장 안쪽 하위 연산자여야 합니다.
구문
term
연산자의 구문은 다음과 같습니다.
"term": { "path": "<path-to-field>", "query": "<terms-to-search>" }
필드
term
연산자는 다음 필드를 사용합니다.
옵션 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
path | 문자열 | 네 | 검색할 인덱싱된 필드입니다. |
query | 문자열 | 네 | Atlas Search에 사용할 용어 또는 구문. |
위치 연산자
위치 연산자를 사용하여 용어 연산자와 함께 Atlas Search에 표시할 용어의 위치를 지정할 수 있습니다. 위치 연산자의 유형은 document
입니다. span
연산자 쿼리에 위치 연산자를 하나 이상 지정해야 합니다. 위치 연산자는 다른 span
위치 연산자를 재귀적으로 사용할 수 있습니다.
참고
예시 정보
이 페이지의 예제에서는 sample_mflix.movies
컬렉션을 사용합니다. 샘플 데이터를 로드하고 default
영화 컬렉션 에 이라는 동적 인덱스를 생성 하면 컬렉션에 대해 다음 $search
샘플 쿼리를 실행할 수 있습니다. 샘플 쿼리는 $limit
단계를 사용하여 결과를 5
문서로 제한하고 $project
단계를 사용하여 결과에서 title
필드를 제외한 모든 필드를 제외합니다.
span
다음과 같은 선택적 위치 연산자를 사용합니다.
contains
contains
위치 연산자는 다른 텀 내에 포함된 텀과 일치합니다. 위치 연산자 를 재귀적으로 사용하거나 contains
내에서 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다.
구문
contains
위치 연산자의 구문은 다음과 같습니다.
{ "$search": { "span": { "contains": { "spanToReturn": "inner"|"outer", "little": { <positional-or-term-operator-specification> }, "big": { <positional-or-term-operator-specification> } } } } }
필드
contains
위치 연산자는 다음 필드를 사용합니다.
필드 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
big | 문서 | 네 | |
little | 문서 | 네 | |
score | 문서 | no | 이 Atlas Search의 결과에 적용할 점수입니다. |
spanToReturn | 문자열 | 네 | 실행할 쿼리 유형과 반환할 일치하는 결과입니다. 값은 다음 중 하나일 수 있습니다.
|
예시
다음 예제 쿼리는 span.contains
을 사용하여 train
용어가 great
및 robbery
용어와 함께 나타나는 문서를 찾습니다. 여기서 great
와 robbery
5 title
필드입니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "span": { 5 "contains": { 6 "spanToReturn": "outer", 7 "little": { 8 "term": { 9 "path": "title", 10 "query": "train" 11 } 12 }, 13 "big": { 14 "near": { 15 "clauses": [ 16 { 17 "term": { 18 "path": "title", 19 "query": "great" 20 } 21 }, 22 { 23 "term": { 24 "path": "title", 25 "query": "robbery" 26 } 27 } 28 ], 29 "slop": 5 30 } 31 } 32 } 33 } 34 } 35 }, 36 { 37 "$limit": 5 38 }, 39 { 40 "$project": { 41 "_id": 0, 42 "title": 1 43 } 44 } 45 ])
[ { title: 'The Great Train Robbery' }, { title: 'The Great Train Robbery' }, { title: "The Great St. Trinian's Train Robbery" } ]
Atlas Search는 great
및 robbery
텀( big
을 사용하여 지정) 안에 train
텀( little
을 사용하여 지정)이 포함 된 문서를 반환합니다. 6 spanToReturn
inner
로 설정하면 Atlas Search에서 train
( little
를 사용하여 지정됨)이라는 용어 가 great
및 robbery
( big
).
first
first
위치 연산자는 지정된 숫자를 사용하여 Atlas Search 용어의 위치를 식별합니다. 위치 연산자 를 재귀적으로 사용하거나 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다. span
은(는) Atlas Search 텀의 위치가 지정된 숫자보다 작거나 같은 문서와 일치합니다.
구문
first
위치 연산자의 구문은 다음과 같습니다.
{ "$search": { "span": { "first": { "endPositionLte": <term-position>, "operator": { <span-positional-or-term-operator-specification> }, "score": { <score-options> } } } } }
필드
first
위치 연산자는 다음 필드를 사용합니다.
예시
다음 예제 쿼리에서는 span.first
을 사용하여 지정된 string 이 title
필드에 나타나는 문서를 찾습니다. endPositionLte
매개변수의 값은 2
이며, 이는 term
연산자를 사용하여 지정된 Atlas Search 용어가 필드의 첫 번째 또는 두 번째 단어여야 함을 의미합니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "span": { 5 "first": { 6 "endPositionLte": 2, 7 "operator": { 8 "term": { 9 "path": "title", 10 "query": "dance" 11 } 12 } 13 } 14 } 15 } 16 }, 17 { 18 "$limit": 5 19 }, 20 { 21 "$project": { 22 "_id": 0, 23 "title": 1 24 } 25 } 26 ])
[ { title: 'Dance Program' }, { title: 'Slam Dance' }, { title: 'Last Dance' }, { title: 'War Dance' }, { title: 'Delhi Dance' } ]
Atlas Search는 title
필드의 첫 번째 또는 두 번째 위치에 검색어 dance
가 포함된 문서를 반환합니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "span": { 5 "first": { 6 "endPositionLte": 2, 7 "operator": { 8 "or": { 9 "clauses": [ 10 { "term": { "path": "title", "query": "man" } }, 11 { "term": { "path": "title", "query": "woman" } } 12 ] 13 } 14 } 15 } 16 } 17 } 18 }, 19 { 20 "$limit": 5 21 }, 22 { 23 "$project": { 24 "_id": 0, 25 "title": 1 26 } 27 } 28 ])
[ { title: "Everybody's Woman" }, { title: 'Marked Woman' }, { title: 'Wonder Man' }, { title: 'Designing Woman' }, { title: 'Watermelon Man' } ]
Atlas Search는 title
필드의 첫 번째 또는 두 번째 위치에 man
또는 woman
검색어가 포함된 문서를 반환합니다. Atlas Search는 동일한 title
내 두 검색어를 모두 반환하지 않습니다. 이 예에는 검색어를 지정하는 or
연산자 clauses
가 포함되어 있기 때문입니다.
near
near
위치 연산자는 서로 가까이 있는 Atlas Search 용어를 포함하는 두 개 이상의 절과 일치합니다. 위치 연산자 목록을 재귀적으로 사용하거나 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다.
구문
near
위치 연산자의 구문은 다음과 같습니다.
{ "$search": { "span": { "near": { "clauses": [ { <span-positional-or-term-operator-specification> }, ... ], "slop": <distance-number>, "inOrder": true|false } } } }
필드
near
위치 연산자는 다음 필드를 사용합니다.
필드 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
clauses | 문서 배열 | 네 | |
inOrder | 부울 | no | 절의 용어에 대한 Atlas Search가 지정된 순서대로 이루어져야 하고 겹치지 않아야 하는지 여부를 지정하는 플래그입니다. 값은 다음 중 하나일 수 있습니다.
생략하는 경우 기본값은 |
score | 문서 | no | 이 Atlas Search의 결과에 적용할 점수입니다. |
slop | integer | no | 절의 용어 사이의 허용 거리입니다. 값이 낮을수록 용어 간의 위치 거리가 줄어들고 값이 클수록 쿼리를 충족하기 위해 단어 사이의 거리가 길어집니다. 기본값은 0 이며, 이는 서로 다른 절에 있는 단어가 인접해 있어야 일치하는 것으로 간주됩니다. |
예시
다음 예제 쿼리는 span.near
를 사용하여 Atlas Search에서 문자열 prince
와 pauper
가 서로 가까이 있는 문서를 검색합니다. inOrder
매개 변수가 false
로 설정되어 있으므로 Atlas Search 용어의 순서는 상관 없습니다. slop
매개변수가 4
로 설정되어 있으므로 Atlas Search 용어는 최대 4단어까지 구분할 수 있습니다.
1 db.movies.aggregate([ 2 { 3 "$search" : { 4 "span": { 5 "near": { 6 "clauses": [ 7 { "term": { "path": "title", "query": "prince" } }, 8 { "term": { "path": "title", "query": "pauper" } } 9 ], 10 "slop": 4, 11 "inOrder": false 12 } 13 } 14 } 15 }, 16 { 17 "$limit": 5 18 }, 19 { 20 "$project": { 21 "_id": 0, 22 "title": 1 23 } 24 } 25 ])
[ { title: 'The Prince and the Pauper' } ]
Atlas Search 는 title
필드에 4개의 단어 미만으로 구분된 Atlas Search 단어 prince
및 pauper
가 포함된 문서를 반환합니다.
or
or
위치 연산자는 두 개 이상의 절과 일치합니다. 위치 연산자 목록을 재귀적으로 사용하거나 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다.
구문
or
위치 연산자의 구문은 다음과 같습니다.
{ "$search": { "span": { "or": { "clauses": [ { <span-positional-or-term-operator-specification> }, ... ], "score": { <scoring-options> } } } } }
필드
or
위치 연산자는 다음 필드를 사용합니다.
예시
다음 예제 쿼리는 span.or
절을 사용하여 title
필드에 city
또는 country
이 있는 문서에 대해 Atlas Search 가 수행하는 두 용어 연산자 쿼리를 지정합니다.
1 db.movies.aggregate([ 2 { 3 "$search" : { 4 "span": { 5 "or": { 6 "clauses": [ 7 { "term": { "path": "title", "query": "city" } }, 8 { "term": { "path": "title", "query": "country" } } 9 ], 10 } 11 } 12 } 13 }, 14 { 15 "$limit": 5 16 }, 17 { 18 "$project": { 19 "_id": 0, 20 "title": 1 21 } 22 } 23 ])
[ { title: 'Country' }, { title: 'City Lights' }, { title: 'King & Country' }, { title: 'Fat City' }, { title: 'Atlantic City' } ]
Atlas Search 는 title
필드에 Atlas Search 단어 city
또는 country
가 포함된 문서를 반환하지만 동일한 title
에는 둘 다 반환하지 않습니다.
subtract
subtract
위치 연산자는 다른 일치 항목과 겹치는 일치 항목을 제거합니다. 위치 연산자 목록을 재귀적으로 사용하거나 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다. subtract
절을 사용하여 Atlas Search 결과에서 특정 문자열을 제외할 수 있습니다.
구문
subtract
위치 연산자의 구문은 다음과 같습니다.
{ "$search": { "span": { "subtract": { "include": { <span-positional-or-term-operator-specification> }, "exclude": { <span-positional-or-term-operator-specification> } } } } }
필드
subtract
위치 연산자는 다음 필드를 사용합니다.
예시
다음 예제 쿼리에서는 span.subtract
title
father
를 사용하여 필드에 및 son
단어가 3 서로 단어 내에 순서에 관계없이 포함된 문서를 Atlas Search에 검색합니다. father
과 son
사이에 like
라는 단어가 있는 문서는 제외됩니다.
1 db.movies.aggregate([ 2 { 3 "$search" : { 4 "span": { 5 "subtract": { 6 "include": { 7 "near": { 8 "clauses": [ 9 { "term": { "path": "title", "query": "father" } }, 10 { "term": { "path": "title", "query": "son" } } 11 ], 12 "inOrder": false, 13 "slop": 3 14 } 15 }, 16 "exclude": { "term": { "path": "title", "query": "like" } } 17 } 18 } 19 } 20 }, 21 { 22 "$limit": 5 23 }, 24 { 25 "$project": { 26 "_id": 0, 27 "title": 1 28 } 29 } 30 ])
[ { title: 'Father, Son & Holy Cow' }, { title: 'My Father and My Son' }, { title: 'Jimmy Rosenberg: The Father, the Son & the Talent' } ]
Atlas Search는 제목이 Like Father Like
Son
인 문서를 반환하지 않습니다. 이는 title
필드에 father
및 son
단어가 포함되어 있지만 그 사이에 like
도 있고, 이는 exclude
기준에 속하기 때문입니다. 쿼리.