Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

span

이 페이지의 내용

  • 정의
  • 구문
  • 용어 연산자
  • 구문
  • 필드
  • 위치 연산자
  • contains
  • first
  • near
  • or
  • subtract

참고

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 내에서 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다.

contains 위치 연산자의 구문은 다음과 같습니다.

{
"$search": {
"span": {
"contains": {
"spanToReturn": "inner"|"outer",
"little": { <positional-or-term-operator-specification> },
"big": { <positional-or-term-operator-specification> }
}
}
}
}

contains 위치 연산자는 다음 필드를 사용합니다.

필드
유형
필수 사항입니다.
설명
big
문서

재귀적으로 지정된 하나 이상의 위치 연산자 또는 용어 연산자만 지정합니다. 다음 표는 spanToReturn 값을 기준으로 spanbig 에 대해 실행하는 쿼리 유형을 보여줍니다.

outer
span little의 텀을 하나 이상 포함하는 big의 텀과 일치합니다.
inner
span big의 텀 내에 있는 little의 텀과 일치합니다.
little
문서

재귀적으로 지정된 하나 이상의 위치 연산자 또는 용어 연산자만 지정합니다. 다음 표는 spanToReturn 값을 기준으로 spanlittle 에 대해 실행하는 쿼리 유형을 보여줍니다.

inner
span big의 텀 내에 있는 little의 텀과 일치합니다.
outer
span little의 텀을 하나 이상 포함하는 big의 텀과 일치합니다.
score
문서
no
이 Atlas Search의 결과에 적용할 점수입니다.
spanToReturn
문자열

실행할 쿼리 유형과 반환할 일치하는 결과입니다. 값은 다음 중 하나일 수 있습니다.

  • inner - big의 텀 내에 있는 little 의 텀과 일치하는 쿼리를 실행합니다.

  • outer - little의 텀을 하나 이상 포함하는 big 의 텀과 일치하는 포함 쿼리를 실행합니다.

다음 예제 쿼리는 span.contains 을 사용하여 train 용어가 greatrobbery 용어와 함께 나타나는 문서를 찾습니다. 여기서 greatrobbery 5 title 필드입니다.

1db.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는 greatrobbery 텀( big 을 사용하여 지정) 안에 train 텀( little 을 사용하여 지정)이 포함 된 문서를 반환합니다. 6 spanToReturn inner 로 설정하면 Atlas Search에서 train ( little 를 사용하여 지정됨)이라는 용어 greatrobbery ( big).

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 위치 연산자는 다음 필드를 사용합니다.

옵션
유형
필수 사항입니다.
설명
endPositionLte
int
no
Atlas Search 용어의 위치를 지정하는 숫자입니다. 여러 용어에 대해 Atlas Search를 지정하는 경우 마지막 용어는 이 값보다 작거나 같아야 합니다. 생략하면 기본값은 3 입니다.
operator
문서
위치 연산자 또는 용어 연산자 옵션이 포함된 문서입니다.
score
문서
no
이 Atlas Search의 결과에 적용할 점수입니다.

다음 예제 쿼리에서는 span.first 을 사용하여 지정된 string 이 title 필드에 나타나는 문서를 찾습니다. endPositionLte 매개변수의 값은 2 이며, 이는 term 연산자를 사용하여 지정된 Atlas Search 용어가 필드의 첫 번째 또는 두 번째 단어여야 함을 의미합니다.

1db.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가 포함된 문서를 반환합니다.

1db.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 위치 연산자는 서로 가까이 있는 Atlas Search 용어를 포함하는 두 개 이상의 절과 일치합니다. 위치 연산자 목록을 재귀적으로 사용하거나 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다.

near 위치 연산자의 구문은 다음과 같습니다.

{
"$search": {
"span": {
"near": {
"clauses": [
{ <span-positional-or-term-operator-specification> },
...
],
"slop": <distance-number>,
"inOrder": true|false
}
}
}
}

near 위치 연산자는 다음 필드를 사용합니다.

필드
유형
필수 사항입니다.
설명
clauses
문서 배열
서로 가까이 있어야 하는 Span 절입니다. 절은 비워 둘 수 없습니다. 각 문서에는 span 위치 또는 용어 연산자 옵션만 포함되어 있습니다.
inOrder
부울
no

절의 용어에 대한 Atlas Search가 지정된 순서대로 이루어져야 하고 겹치지 않아야 하는지 여부를 지정하는 플래그입니다.

값은 다음 중 하나일 수 있습니다.

  • true - Atlas에서 지정된 순서대로 절의 용어를 겹치지 않고 검색합니다.

  • false - Atlas에서 절의 용어를 임의의 순서로 검색

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

score
문서
no
이 Atlas Search의 결과에 적용할 점수입니다.
slop
integer
no
절의 용어 사이의 허용 거리입니다. 값이 낮을수록 용어 간의 위치 거리가 줄어들고 값이 클수록 쿼리를 충족하기 위해 단어 사이의 거리가 길어집니다. 기본값은 0 이며, 이는 서로 다른 절에 있는 단어가 인접해 있어야 일치하는 것으로 간주됩니다.

다음 예제 쿼리는 span.near 를 사용하여 Atlas Search에서 문자열 princepauper 가 서로 가까이 있는 문서를 검색합니다. inOrder 매개 변수가 false 로 설정되어 있으므로 Atlas Search 용어의 순서는 상관 없습니다. slop 매개변수가 4 로 설정되어 있으므로 Atlas Search 용어는 최대 4단어까지 구분할 수 있습니다.

1db.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 단어 princepauper가 포함된 문서를 반환합니다.

or 위치 연산자는 두 개 이상의 절과 일치합니다. 위치 연산자 목록을 재귀적으로 사용하거나 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다.

or 위치 연산자의 구문은 다음과 같습니다.

{
"$search": {
"span": {
"or": {
"clauses": [
{ <span-positional-or-term-operator-specification> },
...
],
"score": { <scoring-options> }
}
}
}
}

or 위치 연산자는 다음 필드를 사용합니다.

옵션
유형
필수 사항입니다.
설명
clauses
문서 배열
Atlas Search 용어를 지정하는 Span 절입니다. 절 중 하나가 일치해야 하며 절은 비워 둘 수 없습니다. 각 문서에는 재귀적으로 지정된 span 위치 연산자 또는 용어 연산자 옵션만 포함되어야 합니다.
score
문서
no
이 Atlas Search의 결과에 적용할 점수입니다.

다음 예제 쿼리는 span.or 절을 사용하여 title 필드에 city 또는 country 이 있는 문서에 대해 Atlas Search 가 수행하는 두 용어 연산자 쿼리를 지정합니다.

1db.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 위치 연산자는 다른 일치 항목과 겹치는 일치 항목을 제거합니다. 위치 연산자 목록을 재귀적으로 사용하거나 용어 연산자만 사용하여 Atlas Search 용어를 지정할 수 있습니다. subtract 절을 사용하여 Atlas Search 결과에서 특정 문자열을 제외할 수 있습니다.

subtract 위치 연산자의 구문은 다음과 같습니다.

{
"$search": {
"span": {
"subtract": {
"include": { <span-positional-or-term-operator-specification> },
"exclude": { <span-positional-or-term-operator-specification> }
}
}
}
}

subtract 위치 연산자는 다음 필드를 사용합니다.

옵션
유형
필수 사항입니다.
설명
exclude
문서
include 필드에 지정된 용어 또는 구문 일치 항목과 중복되는 항목을 제거하기 위해 용어 또는 구문 일치 항목을 지정하는 문서입니다. 스팬 위치 연산자용어 연산자를 사용하여 용어 또는 구를 지정할 수 있습니다.
include
문서
위치 연산자 를 사용하거나 용어 연산자만 사용하여 포함할 일치 용어를 지정하는 문서입니다.
score
문서
no
이 Atlas Search의 결과에 적용할 점수입니다.

다음 예제 쿼리에서는 span.subtract title father 를 사용하여 필드에 및 son 단어가 3 서로 단어 내에 순서에 관계없이 포함된 문서를 Atlas Search에 검색합니다. fatherson 사이에 like 라는 단어가 있는 문서는 제외됩니다.

1db.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 필드에 fatherson 단어가 포함되어 있지만 그 사이에 like 도 있고, 이는 exclude 기준에 속하기 때문입니다. 쿼리.

돌아가기

정규식