범위
정의
구문
range
의 구문은 다음과 같습니다:
1 { 2 "$search": { 3 "index": <index name>, // optional, defaults to "default" 4 "range": { 5 "path": "<field-to-search>", 6 "gt | gte": <value-to-search>, 7 "lt | lte": <value-to-search>, 8 "score": <score-options> 9 } 10 } 11 }
옵션
range
는 다음 용어를 사용하여 쿼리를 구성합니다:
필드 | 유형 | 설명 | 필요성 |
---|---|---|---|
gt or gte | BSON 날짜, 숫자, 문자열 또는 objectId | no | |
lt or lte | BSON 날짜, 숫자, 문자열 또는 objectId | no | |
path | 문자열 또는 문자열 배열 | 인덱싱된 필드 또는 검색할 필드입니다. 경로 구성을 참조하세요. | 네 |
score | 객체 | 일치하는 검색 결과에 할당된 점수를 수정합니다. 다음 옵션을 사용하여 기본 점수를 수정할 수 있습니다.
배열에서 값을 쿼리할 때, Atlas Search는 배열 내 쿼리와 일치하는 값의 개수에 따라 일치하는 결과의 점수를 수정하지 않습니다. 점수는 배열 내부의 일치 항목 수에 관계없이 단일 일치 항목과 동일합니다. 쿼리에서 | no |
예시
다음 예시에서는 샘플 데이터의 컬렉션을 사용합니다. 클러스터에 샘플 데이터를 로드한 경우, 아래 예시의 인덱스 정의를 사용하여 인덱스를 생성하고 클러스터에서 예시 쿼리를 실행할 수 있습니다.
팁
샘플 데이터 집합을 이미 로드한 경우, Atlas Search 시작하기 자습서에 따라 인덱스 정의를 만들고 Atlas Search 쿼리를 실행하세요.
번호 예시
다음 예시에서는 샘플 데이터의 숫자 필드에 인덱스를 사용하고 인덱싱된 필드에 대해 range
쿼리를 실행합니다.
이 예에서는 정적 또는 동적 매핑을 사용하여 sample_mflix.movies
collection의 runtime
필드에 대한 인덱스를 생성할 수 있습니다. 이 쿼리는 gte
및 lte
필드를 사용하여 검색할 숫자 범위를 정의합니다.
샘플 인덱스
default
라고 명명된 다음 인덱스 정의는 movies
컬렉션의 모든 필드를 인덱싱합니다.
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
default
(이)라고 명명된 다음 인덱스 정의는 movies
컬렉션에서만 runtime
필드의 인덱스를 생성합니다.
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "runtime": { 6 "type": "number" 7 } 8 } 9 } 10 }
샘플 쿼리
다음 쿼리는 런타임이 2
보다 크거나 같고 3
보다 작거나 같은 영화를 검색합니다. 쿼리는 출력 결과를 5
개로 제한하기 위해 $limit
단계를 포함하고, title
과 runtime
를 제외한 모든 필드를 제외하기 위해 $project
단계를 포함합니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "runtime", 6 "gte": 2, 7 "lte": 3 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "runtime": 1 19 } 20 } 21 ])
{ "runtime" : 3, "title" : "Dots" } { "runtime" : 3, "title" : "Sisyphus" } { "runtime" : 3, "title" : "The Fly" } { "runtime" : 2, "title" : "Andrè and Wally B." } { "runtime" : 2, "title" : "Luxo Jr." }
이 예에서는 정적 또는 동적 매핑을 사용하여 sample_mflix.movies
컬렉션의 runtime
필드를 인덱싱할 수 있습니다. 쿼리는 lte
필드를 사용하여 지정된 값보다 작거나 같은 모든 값을 검색합니다.
샘플 인덱스
default
이라는 이름의 다음 인덱스 정의는 movies
컬렉션의 runtime
필드를 인덱싱합니다.
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "runtime": { 6 "type": "number" 7 } 8 } 9 } 10 }
샘플 쿼리
다음 쿼리는 런타임이 2
이하인 모든 영화를 검색합니다. 여기에는 출력을 5
결과로 제한하는 $limit
단계와 $project
단계가 포함되어 있습니다.
title
및runtime
을 제외한 모든 필드를 제외합니다.다음과 같은 이름의 필드를 추가합니다.
score
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "runtime", 6 "lte": 2 7 } 8 } 9 }, 10 { 11 "$limit": 5 12 }, 13 { 14 "$project": { 15 "_id": 0, 16 "title": 1, 17 "runtime": 1, 18 score: { $meta: "searchScore" } 19 } 20 } 21 ])
{ "runtime" : 1, "title" : "Blacksmith Scene", "score" : 1 } { "runtime" : 2, "title" : "Andrè and Wally B.", "score" : 1 } { "runtime" : 2, "title" : "Luxo Jr.", "score" : 1 } { "runtime" : 1, "title" : "The Kiss", "score" : 1 } { "runtime" : 1, "title" : "Dickson Experimental Sound Film", "score" : 1 }
다음 예제에서는 sample_analytics.customers
컬렉션에서 숫자 값 배열이 있는 필드를 포함하여 동적으로 인덱싱할 수 있는 모든 필드를 동적으로 인덱싱합니다. 샘플 쿼리는 gte
및 lte
필드를 사용하여 숫자 값 배열에서 지정된 값 사이의 모든 값을 Atlas Search에 사용합니다.
샘플 인덱스
default
이라는 이름의 다음 인덱스 정의는 숫자 값의 배열인 accounts
필드를 포함하여 모든 필드를 동적으로 인덱싱합니다.
{ "mappings": { "dynamic": true } }
샘플 쿼리
다음 쿼리는 250000
~ 300000
사이의 고객 계정을 검색합니다. 여기에는 출력을 5
결과로 제한하는 $limit
단계와 accounts
및 name
를 제외한 모든 필드를 제외하는 $project
단계가 포함됩니다.
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "accounts", 6 "gt": 250000, 7 "lt": 400000 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "accounts": 1, 18 "name": 1 19 } 20 } 21 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] 5 }, 6 { 7 name: 'Katherine David', 8 accounts: [ 462501, 228290, 968786, 515844, 377292 ] 9 }, 10 { 11 name: 'Brad Cardenas', 12 accounts: [ 721914, 817222, 973067, 260799, 87389 ] 13 }, 14 { 15 name: 'Gary Nichols', 16 accounts: [ 385397, 337979, 325377, 440243, 586395, 86702 ] 17 }, 18 { name: 'Jennifer Lawrence', accounts: [ 344885, 839927, 853542 ] } 19 ]
날짜 예시
다음 예시에서는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 날짜 필드를 쿼리합니다. 이 예시에서는 정적 또는 동적 매핑을 사용하여 컬렉션에서 released
이라는 date
유형 필드를 인덱싱할 수 있습니다.
샘플 인덱스
default
이라는 이름의 다음 인덱스 정의는 date
유형인 released
필드를 포함하여 movies
collection의 모든 동적으로 인덱싱할 수 있는 필드를 인덱싱합니다.
{ "mappings": { "dynamic": true } }
default
이라는 이름의 다음 인덱스 정의는 movies
컬렉션의 released
필드를 인덱싱합니다.
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
샘플 쿼리
다음 쿼리는 2010년 1월 1일과 2015년 1월 1일 사이에 개봉한 영화를 검색합니다. 여기에는 출력 결과를 5개로 제한하는 $limit
단계와 title
및 released
를 제외한 모든 필드를 제외하는 $project
단계가 포함되어 있습니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "released", 6 "gt": ISODate("2010-01-01T00:00:00.000Z"), 7 "lt": ISODate("2015-01-01T00:00:00.000Z") 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "released": 1 19 } 20 } 21 ])
1 [ 2 { 3 title: 'Too Much Johnson', 4 released: ISODate('2014-08-30T00:00:00.000Z') 5 }, 6 { 7 title: 'Stolen Desire', 8 released: ISODate('2012-07-01T00:00:00.000Z') 9 }, 10 { 11 title: 'The Monkey King', 12 released: ISODate('2012-01-12T00:00:00.000Z') 13 }, 14 { title: 'The Land', released: ISODate('2012-08-04T00:00:00.000Z') }, 15 { 16 title: 'My Childhood', 17 released: ISODate('2013-07-31T00:00:00.000Z') 18 } 19 ]
ObjectId 예시
다음 예시에서는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 objectId
필드를 쿼리합니다. 이 예시에서는 정적 또는 동적 매핑을 사용하여 컬렉션에서 _id
라는 objectId
유형 필드를 인덱싱할 수 있습니다.
샘플 인덱스
default
라고 명명된 다음 인덱스 정의는 movies
컬렉션의 모든 필드를 인덱싱합니다.
default
이라는 이름의 다음 인덱스 정의는 objectId
유형인 _id
필드를 포함하여 movies
collection의 모든 동적으로 인덱싱할 수 있는 필드를 인덱싱합니다.
{ "mappings": { "dynamic": true } }
default
이라는 이름의 다음 인덱스 정의는 movies
컬렉션의 _id
필드를 인덱싱합니다.
{ "mappings": { "dynamic": false, "fields": { "_id": { "type": "objectId" } } } }
샘플 쿼리
다음 예시는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 _id
필드에서 objectId
값 범위를 쿼리합니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "_id", 6 "gte": ObjectId("573a1396f29313caabce4a9a"), 7 "lte": ObjectId('573a1396f29313caabce4ae7') 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 1, 14 "title": 1, 15 "released": 1 16 } 17 } 18 ])
1 [ 2 { 3 _id: ObjectId('573a1396f29313caabce4a9a'), 4 title: 'The Godfather', 5 released: ISODate('1972-03-24T00:00:00.000Z') 6 }, 7 { 8 _id: ObjectId('573a1396f29313caabce4a9b'), 9 title: 'Get to Know Your Rabbit', 10 released: ISODate('1972-06-01T00:00:00.000Z') 11 }, 12 { 13 _id: ObjectId('573a1396f29313caabce4aad'), 14 title: 'The Tall Blond Man with One Black Shoe', 15 released: ISODate('1973-08-30T00:00:00.000Z') 16 }, 17 { 18 _id: ObjectId('573a1396f29313caabce4abe'), 19 title: 'The Great Northfield Minnesota Raid', 20 released: ISODate('1972-05-12T00:00:00.000Z') 21 }, 22 { 23 _id: ObjectId('573a1396f29313caabce4ac4'), 24 title: 'The Heartbreak Kid', 25 released: ISODate('1973-02-01T00:00:00.000Z') 26 }, 27 { 28 _id: ObjectId('573a1396f29313caabce4ac7'), 29 title: 'Gumshoe', 30 released: ISODate('1971-12-01T00:00:00.000Z') 31 }, 32 { 33 _id: ObjectId('573a1396f29313caabce4ad9'), 34 title: 'Heat', 35 released: ISODate('1972-10-06T00:00:00.000Z') 36 }, 37 { 38 _id: ObjectId('573a1396f29313caabce4ae7'), 39 title: 'Horror Express', 40 released: ISODate('1973-12-01T00:00:00.000Z') 41 } 42 ]
문자열 예시
다음 예시에서는 range
연산자를 사용하여 sample_mflix.movies
컬렉션의 문자열 필드를 쿼리합니다. 이 예에서는 정적 매핑을 사용하여 컬렉션의 title
라는 필드를 Atlas Search token
유형으로 인덱싱해야 합니다.
샘플 인덱스
default
이라는 다음 인덱스 정의는 movies
컬렉션의 title
필드를 Atlas Search token
유형으로 인덱싱합니다.
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "token", "normalizer": "lowercase" } } } }
샘플 쿼리
다음 쿼리는 city
와 country
사이의 문자가 포함된 영화 제목을 검색합니다. 여기에는 출력을 5 결과로 제한하는 $limit
단계와 title
을 제외한 모든 필드를 제외하는 $project
단계가 포함되어 있습니다.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "title", 6 "gt": "city", 7 "lt": "country" 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1 18 } 19 } 20 ])
[ { title: 'Civilization' }, { title: 'Clash of the Wolves' }, { title: 'City Lights' }, { title: 'Comradeship' }, { title: 'Come and Get It' } ]