Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

쿼리 문자열

이 페이지의 내용

  • 정의
  • 구문
  • 옵션
  • 예시
  • 부울 연산자 쿼리
  • 범위 쿼리
  • 와일드카드 쿼리
queryString

queryString 연산자는 인덱싱된 필드와 값의 조합에 대한 쿼리를 지원합니다. queryString 연산자를 사용하여 string 필드에서 텍스트, 와일드카드, 정규 표현식, 퍼지 및 범위 검색을 수행할 수 있습니다.

queryString 의 구문은 다음과 같습니다:

1{
2 "$search": {
3 "index": <index name>, // optional, defaults to "default"
4 "queryString": {
5 "defaultPath": "<default-field-to-search>",
6 "query": "(<field-to-search>: (<search-values>) AND|OR (<search-values>)) AND|OR (<search-values>)"
7 }
8 }
9}

queryString 는 다음 용어를 사용하여 쿼리를 구성합니다:

필드
유형
설명
필요성

defaultPath

문자열

기본적으로 검색할 인덱싱된 필드입니다. Atlas Search는 query에서 검색할 필드를 생략한 경우에만 defaultPath의 필드를 검색합니다.

query

문자열

하나 이상의 인덱싱된 필드와 검색 대상 값입니다. 필드와 값은 콜론으로 구분됩니다. 예를 들어 plot 필드에서 baseball 문자열을 검색하려면 plot:baseball를 사용합니다. 여러 검색 기준을 결합하는 데 사용할 수 있는 연산자는 다음과 같습니다.

다음을 사용하여 필드와 값을 결합할 수 있습니다.

AND

AND 부울 연산자를 나타냅니다. 문서가 결과에 포함되려면 모든 검색 값이 있어야 합니다.

OR

OR 부울 연산자를 나타냅니다. 문서를 결과에 포함하려면 검색 값 중 하나 이상이 있어야 합니다.

NOT

0}NOT 부울 연산자를 나타냅니다. 문서가 결과에 포함되려면 지정된 검색 값이 없어야 합니다.

TO

검색할 범위를 나타냅니다. 포함 범위에는 [], 배타적 범위에는 {}, 반개방 범위에는 {][}를 사용할 수 있습니다. 문서가 결과에 포함되려면 지정된 범위 내에 속하는 모든 값이 있어야 합니다.

()

하위 쿼리용 구분 기호입니다. 괄호를 사용하여 검색할 필드와 값을 그룹화할 수 있습니다.

다음을 사용하여 와일드카드 및 정규 표현식 쿼리를 실행할 수 있습니다.

?

일치시킬 단일 문자를 나타냅니다.

*

일치시킬 문자가 0개 이상임을 나타냅니다.

queryString 연산자는 쿼리의 첫 번째 문자로 * 와일드카드 쿼리를 지원하지 않습니다. queryString 연산자는 * 앞의 모든 문자를 접두사 또는 정확히 일치해야 하는 문자로 취급합니다.

/

정규 표현식을 위한 구분자입니다.

~

지정된 편집 횟수까지 검색어와 유사한 문자열을 찾기 위한 퍼지 검색을 나타냅니다. 예를 들어 { "query":"foo":"stop"~2 }는 다음과 같습니다.

{ "defaultPath": "foo", "query": "stop", "maxEdits": 2 }

queryString 연산자는 편집 2건 이하에 대해서만 퍼지 검색을 지원합니다. 거리가 멀면 결과가 사전의 여러 용어와 일치할 수 있으므로 유용하지 않습니다.

~ 을 문자열의 여러 용어와 함께 사용하는 경우 queryString 연산자는 지정된 수의 용어 범위 내에서 근접 검색을 수행합니다. 예를 들어 { "query":"foo":"New York"~2 }는 다음과 같습니다.

{ "defaultPath": "foo", "query": "New York", "slop": 2 }

score

객체

일치하는 검색 결과에 할당된 점수입니다. 다음 옵션을 사용하여 기본 점수를 수정할 수 있습니다.

  • boost결과 점수에 주어진 숫자를 곱합니다.

  • constant결과 점수를 주어진 숫자로 바꿉니다.

  • function결과 점수를 주어진 표현식으로 대체합니다.

배열에서 값을 쿼리할 때, Atlas Search는 배열 내 쿼리와 일치하는 값의 개수에 따라 일치하는 결과의 점수를 수정하지 않습니다. 점수는 배열 내부의 일치 항목 수에 관계없이 단일 일치 항목과 동일합니다.

쿼리에서 score 사용에 대한 자세한 내용은 결과에서 문서 채점하기를 참조하세요.

no

다음 예에서는 sample_mflix 데이터베이스의 movies collection을 사용합니다. 클러스터에 샘플 데이터 세트가 있는 경우 동적 매핑을 사용하여 default라는 이름의 Atlas Search 인덱스를 생성하고 클러스터에서 예시 쿼리를 실행할 수 있습니다.

다음 예시에서는 queryString 연산자를 사용하여 제목이 Rocky, IV, 4 또는 Four인 영화를 쿼리합니다.

예시

다음 쿼리는movies 컬렉션의 경로 title에서 RockyIV, 4 또는 Four의 조합을 검색합니다. 다음 쿼리에서 defaultPath에 필드가 지정되었지만 query에 필드가 지정되지 않았습니다. 쿼리에는 title을 제외한 모든 필드를 제외하기 위한 $project 단계가 포함되어 있습니다.

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "Rocky AND (IV OR 4 OR Four)"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1
14 }
15 }
16])

이 쿼리의 경우 query에 필드가 없기 때문에 Atlas Search는 defaultPath에서 검색을 수행합니다. 다음과 같은 결과를 반환합니다.

{ "title" : "Rocky IV" }

다음 예시에서는 queryString 연산자를 사용하여 제목이 Rocky이고 II, III, VI 또는 V가 아닌 영화를 쿼리합니다.

예시

다음 쿼리는 movies 컬렉션의 경로 title에서 숫자 2, 3, 4 또는 5 중 어떤 형태도 아닌 Rocky string을 검색합니다. 다음 쿼리에서는 defaultPath에 필드가 지정되어 있지만 query에는 필드가 지정되어 있지 않습니다. 쿼리에는 title을 제외한 모든 필드를 제외하는 $project 단계가 포함되어 있습니다.

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "Rocky AND NOT ((II OR 2 OR Two) OR (III OR 3 OR Three) OR (IV OR 4 OR Four) OR (V OR 5 OR Five))"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1
14 }
15 }
16])

이 쿼리의 경우 query에 필드가 없기 때문에 Atlas Search는 defaultPath에서 검색을 수행합니다. 다음과 같은 결과를 반환합니다.

[
{ title: 'Rocky' },
{ title: 'Rocky Marciano' },
{ title: 'Rocky Balboa' },
{ title: 'The Rocky Horror Picture Show' },
{ title: 'The Adventures of Rocky & Bullwinkle' }
]

다음 예시에서는 queryString 연산자를 사용하여 Drama 장르에서 제목이 The Italian인 영화를 쿼리합니다.

예시

다음 쿼리는 제목이 Drama 장르에서 The Italian 영화에 대한 필드 조합을 검색합니다. defaultPathplot 필드는 query 필드에 지정된 필드 중 하나에서 일치하는 결과를 찾을 수 없는 경우에만 검색됩니다. query 필드에는 검색할 구문의 구분 기호로 이스케이프된 큰따옴표가 포함되어 있습니다.

쿼리에는 $project 단계가 포함되어 있습니다.

  • _id, title, plotgenres을 제외한 모든 필드 제외

  • 다음과 같은 이름의 필드를 추가합니다. score

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "plot",
6 "query": "title:\"The Italian\" AND genres:Drama"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 1,
13 "title": 1,
14 "plot": 1,
15 "genres": 1,
16 score: { $meta: "searchScore" }
17 }
18 }
19])

이 쿼리는 다음과 같은 결과를 반환합니다:

1{
2 "_id" : ObjectId("573a1390f29313caabcd56df"),
3 "plot" : "An immigrant leaves his sweetheart in Italy to find a better life across the sea in the grimy slums of New York. They are eventually reunited and marry. But life in New York is hard and ...",
4 "genres" : [ "Drama" ],
5 "title" : "The Italian",
6 "score" : 4.975106716156006
7}
8{
9 "_id" : ObjectId("573a13b3f29313caabd3e36c"),
10 "plot" : "Set in 2002, an abandoned 5-year-old boy living in a rundown orphanage in a small Russian village is adopted by an Italian family.",
11 "genres" : [ "Drama" ],
12 "title" : "The Italian",
13 "score" : 4.975106716156006
14}
15{
16 "_id" : ObjectId("573a13c7f29313caabd756ee"),
17 "plot" : "A romantic fairy tale about a 19-year old orphan girl who, as her sole inheritance, gets an antique key that unlocks both an old Italian villa and the secrets of her family history.",
18 "genres" : [ "Comedy", "Drama", "Romance" ],
19 "title" : "The Italian Key",
20 "score" : 4.221206188201904
21}
22{
23 "_id" : ObjectId("573a13caf29313caabd7d1e4"),
24 "plot" : "A chronicle of the 1969 bombing at a major national bank in Milan and its aftermath.",
25 "genres" : [ "Drama" ],
26 "title" : "Piazza Fontana: The Italian Conspiracy",
27 "score" : 3.4441356658935547
28}

다음 예시에서는 queryString 연산자를 사용하여 captain 또는 kirkenterprise가 포함된 영화 줄거리를 쿼리합니다.

예시

다음 쿼리는 plot 필드에서 captain 또는 kirkenterprise 용어의 조합을 검색합니다. 여기에는 출력 결과를 3개로 제한하는 $limit 단계와 $project 단계가 포함되어 있습니다.

  • title, plot, fullplot 이외의 모든 필드 제외

  • 다음과 같은 이름의 필드를 추가합니다. score

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "fullplot",
6 "query": "plot:(captain OR kirk) AND enterprise"
7 }
8 }
9 },
10 {
11 $limit: 3
12 },
13 {
14 $project: {
15 "_id": 0,
16 "title": 1,
17 "plot": 1,
18 "fullplot": 1,
19 score: { $meta: "searchScore" }
20 }
21 }
22])

이 쿼리는 다음과 같은 결과를 반환합니다:

1{
2 "plot" : "Captain Picard, with the help of supposedly dead Captain Kirk, must stop a madman willing to murder on a planetary scale in order to enter an energy ribbon.",
3 "fullplot" : "In the late 23rd century, the gala maiden voyage of the third Starship Enterprise (NCC-1701-B) boasts such luminaries as Pavel Chekov, Montgomery Scott and the legendary Captain James T. Kirk as guests. But the maiden voyage turns to disaster as the unprepared ship is forced to rescue two transport ships from a mysterious energy ribbon. The Enterprise manages to save a handful of the ships' passengers and barely makes it out intact... but at the cost of Captain Kirk's life. Seventy-eight years later, Captain Jean-Luc Picard and the crew of the Enterprise-D find themselves at odds with the renegade scientist Tolian Soran... who is destroying entire star systems. Only one man can help Picard stop Soran's scheme... and he's been dead for seventy-eight years.",
4 "title" : "Star Trek: Generations",
5 "score" : 11.274821281433105
6}
7{
8 "plot" : "Captain Kirk and his crew must deal with Mr. Spock's long-lost half-brother who hijacks the Enterprise for an obsessive search for God at the center of the galaxy.",
9 "fullplot" : "When the newly-christened starship Enterprise's shakedown cruise goes poorly, Captain Kirk and crew put her into Spacedock for repairs. But an urgent mission interrupts their Earth-bound shore leave. A renegade Vulcan named Sybok has taken three ambassadors hostage on Nimbus III, the Planet of Galactic Peace. This event also attracts the attention of a Klingon captain who wants to make a name for himself and sets out to pursue the Enterprise. Sybok's ragtag army captures the Enterprise and takes her on a journey to the center of the galaxy in search of the Supreme Being.",
10 "title" : "Star Trek V: The Final Frontier",
11 "score" : 9.889547348022461
12}
13{
14 "plot" : "When an alien spacecraft of enormous power is spotted approaching Earth, Admiral Kirk resumes command of the Starship Enterprise in order to intercept, examine and hopefully stop the intruder.",
15 "fullplot" : "A massive alien spacecraft of enormous power is approaching Earth, destroying everything in its path. The only star ship in range is the USS Enterprise still in dry-dock after a major overhaul. As Captain Willard Decker readies his ship and his crew to face this menace, Admiral James T. Kirk arrives with orders to take command of the Enterprise and intercept the alien intruder. But it has been three years since Kirk last commanded the Enterprise on its historic five year mission... is he up to the task of saving the Earth?",
16 "title" : "Star Trek: The Motion Picture",
17 "score" : 8.322310447692871
18}

위 결과의 문서가 일치하는 이유는 다음과 같습니다.

  • 첫 번째 문서에서 query에 따라 검색할 필드인 plot 필드는 captainkirk를 모두 포함하고 있으며 둘 중 하나만 있어도 일치 기준을 충족합니다. enterprise라는 용어의 경우 plot 필드에 enterprise가 포함되어 있지 않기 때문에 Atlas Search는 defaultPathfullplot 필드를 검색하여 fullplot 필드에서 enterprise를 찾습니다.

  • 두 번째 문서의 plot 필드에는 세 가지 검색어가 모두 포함되어 있습니다.

  • 세 번째 문서에서 plot 필드는 kirkenterprise를 포함합니다.

다음 예시에서는 queryString 연산자를 사용하여 captain, kirk, chess 용어가 포함된 영화 줄거리를 쿼리합니다. 이 예시에서는 괄호를 사용하여 동일한 검색어를 서로 다르게 그룹화하여 검색 결과에 서로 다른 문서가 포함될 수 있는 방법을 보여줍니다.

예시

다음 쿼리는 plot 필드에서 captain, kirkchess 용어의 조합을 검색합니다. 각 쿼리는 검색어가 그룹화되는 방식에 따라 다른 결과를 반환합니다.

쿼리에는 다음을 위한 $project 단계도 포함되어 있습니다.

  • title, plot, fullpath 이외의 모든 필드 제외

  • 다음과 같은 이름의 필드를 추가합니다. score

다음 쿼리는 plot 필드에서 chesscaptain 또는 kirk 중 하나를 검색합니다.

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "fullplot",
6 "query": "plot:(captain OR kirk) AND chess"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1,
14 "plot": 1,
15 "fullplot": 1,
16 score: { $meta: "searchScore" }
17 }
18 }
19])

이 쿼리는 다음과 같은 결과를 반환합니다:

{
"fullplot" : "When the crew of the Enterprise is called back home, they find an unstoppable force of terror from within their own organization has detonated the fleet and everything it stands for, leaving our world in a state of crisis. With a personal score to settle, Captain Kirk leads a manhunt to a war-zone world to capture a one-man weapon of mass destruction. As our heroes are propelled into an epic chess game of life and death, love will be challenged, friendships will be torn apart, and sacrifices must be made for the only family Kirk has left: his crew.",
"plot" : "After the crew of the Enterprise find an unstoppable force of terror from within their own organization, Captain Kirk leads a manhunt to a war-zone world to capture a one-man weapon of mass destruction.",
"title" : "Star Trek Into Darkness",
"score" : 7.968792915344238
}

위 결과의 문서는 plotcaptainkirk라는 텀이 포함되어 있지만 일치 기준을 충족하려면 하나만 필요하고 plot에는 없지만 chess이라는 텀이 fullplotdefaultPath에 나타나므로 일치하는 문서입니다.

다음 쿼리는 plot 필드에서 captain 또는 kirkchess 를 모두 검색합니다.

db.movies.aggregate([
{
$search: {
"queryString": {
"defaultPath": "fullplot",
"query": "plot:captain OR (kirk AND chess)"
}
}
},
{
$limit: 5
},
{
$project: {
"_id": 0,
"title": 1,
"plot": 1,
"fullplot": 1,
score: { $meta: "searchScore" }
}
}
])

이 쿼리는 다음과 같은 결과를 반환합니다:

{
"fullplot" : "When the crew of the Enterprise is called back home, they find an unstoppable force of terror from within their own organization has detonated the fleet and everything it stands for, leaving our world in a state of crisis. With a personal score to settle, Captain Kirk leads a manhunt to a war-zone world to capture a one-man weapon of mass destruction. As our heroes are propelled into an epic chess game of life and death, love will be challenged, friendships will be torn apart, and sacrifices must be made for the only family Kirk has left: his crew.",
"plot" : "After the crew of the Enterprise find an unstoppable force of terror from within their own organization, Captain Kirk leads a manhunt to a war-zone world to capture a one-man weapon of mass destruction.",
"title" : "Star Trek Into Darkness",
"score" : 9.227973937988281
}
{
"plot" : "Captain Picard, with the help of supposedly dead Captain Kirk, must stop a madman willing to murder on a planetary scale in order to enter an energy ribbon.",
"title" : "Star Trek: Generations",
"fullplot" : "In the late 23rd century, the gala maiden voyage of the third Starship Enterprise (NCC-1701-B) boasts such luminaries as Pavel Chekov, Montgomery Scott and the legendary Captain James T. Kirk as guests. But the maiden voyage turns to disaster as the unprepared ship is forced to rescue two transport ships from a mysterious energy ribbon. The Enterprise manages to save a handful of the ships' passengers and barely makes it out intact... but at the cost of Captain Kirk's life. Seventy-eight years later, Captain Jean-Luc Picard and the crew of the Enterprise-D find themselves at odds with the renegade scientist Tolian Soran... who is destroying entire star systems. Only one man can help Picard stop Soran's scheme... and he's been dead for seventy-eight years.",
"score" : 3.3556222915649414
}
{
"plot" : "An army cadet accompanies an irascible, blind captain on a week-long trip from Turin to Naples. The captain, Fausto, who wants no pity, brooks no disagreement, and charges into every ...",
"title" : "Scent of a Woman",
"fullplot" : "An army cadet accompanies an irascible, blind captain on a week-long trip from Turin to Naples. The captain, Fausto, who wants no pity, brooks no disagreement, and charges into every situation, nicknames the youth Ciccio (\"Babyfat\"), and spends the next few days ordering him about and generally behaving badly in public. In Rome, Fausto summons a priest to ask for his blessing; in Naples, where Fausto joins a blind lieutenant for drinking and revelry, the two soldiers talk quietly and seriously about \"going through with it.\" Also in Naples is Sara, in love with Fausto, but treated cruelly by him. What do the blind soldiers plan? Can Sara soften Fausto's hardened heart?",
"score" : 3.2553727626800537
}
{
"plot" : "A seductive woman falls in love with a mysterious ship's captain.",
"title" : "Pandora and the Flying Dutchman",
"fullplot" : "Albert Lewin's interpretation of the legend of the Flying Dutchman. In a little Spanish seaport named Esperanza, during the 30s, appears Hendrick van der Zee, the mysterious captain of a yacht (he is the only one aboard). Pandora is a beautiful woman (who men kill and die for). She's never really fallen in love with any man, but she feels very attracted to Hendrick... We are soon taught that Hendrick is the Flying Dutchman, this sailor of the 17th century that has been cursed by God to wander over the seas until the Doomsday... unless a woman is ready to die for him...",
"score" : 3.2536067962646484
}
{
"plot" : "The adventures of pirate Captain Red and his first mate Frog.",
"title" : "Pirates",
"fullplot" : "Captain Red runs a hardy pirate ship with the able assistance of Frog, a dashing young French sailor. One day Capt. Red is captured and taken aboard a Spanish galleon, but thanks to his inventiveness, he raises the crew to mutiny, takes over the ship, and kidnaps the niece of the governor of Maracaibo. The question is, can he keep this pace up?",
"score" : 3.2536067962646484
}

plot 필드에 captain 이라는 용어가 포함되어 있기 때문에 위 결과의 문서가 일치합니다. 첫 번째 문서는 일치 기준을 충족하기 위해 용어가 반드시 있어야 하는 것은 아니지만 Atlas Search는 fullplot 필드에서 kirkchess 용어를 찾기 때문에 더 높은 점수를 받습니다.

다음 예시에서는 queryString 연산자를 사용하여 문자 count부터 임의의 문자 (와일드카드 문자 *를 사용하여 정의)까지의 텍스트 값 범위를 알파벳 오름차순으로 영화 제목을 쿼리합니다.

예시

1 db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "plot",
6 "query": "title:[count TO *]"
7 }
8 }
9 },
10 {
11 "$limit": 10
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1
17 }
18 }
19 ])
1[
2 { title: 'Blacksmith Scene' },
3 { title: 'The Great Train Robbery' },
4 { title: 'The Land Beyond the Sunset' },
5 { title: 'A Corner in Wheat' },
6 { title: 'Winsor McCay, the Famous Cartoonist of the N.Y. Herald and His Moving Comics' },
7 { title: 'Traffic in Souls' },
8 { title: 'Gertie the Dinosaur' },
9 { title: 'In the Land of the Head Hunters' },
10 { title: 'The Perils of Pauline' },
11 { title: 'The Birth of a Nation' }
12]

Atlas Search 결과에는 제목이 Blacksmith SceneA Corner in Wheat인 영화가 포함되지만 쿼리의 범위는 문자 count에서 시작합니다. 기본 분석기인 lucene.standard을(를) 사용해 인덱싱하면 Atlas Search가 title 필드의 텀에 대해 별도의 토큰을 생성하고 쿼리 텀을 개별 토큰과 일치시킵니다. 구체적으로 Atlas Search는 다음 토큰을 생성하며 이 중 하나 이상(√로 표시)이 쿼리 기준과 일치하는 토큰을 생성합니다.

제목
표준 분석기 토큰

블랙스미스 씬(Blacksmith Scene)

blacksmith, scene

어 코어 인 윗트(A Corner in Wheat)

a, corner, in, wheat

lucene.keyword 분석기를 사용하여 인덱싱하면 Atlas Search는 title 필드에 전체 문자열에 대해 단일 토큰을 생성하므로 동일한 쿼리에 대해 다음과 비슷한 결과가 나타납니다.

[
{ title: 'è Nous la Libertè' },
{ title: 'tom thumb' },
{ title: 'è nos amours' },
{ title: 'èke och hans vèrld' },
{ title: 'èdipussi' },
{ title: 's/y Glèdjen' },
{ title: 'èAy, Carmela!' },
{ title: 'èlisa' },
{ title: 'èxtasis' },
{ title: 'eXistenZ' }
]

다음 예시에서는 queryString 연산자를 사용하여 drama 영화 장르를 쿼리하고 man ~ men(둘 다 포함) 사이의 텍스트 값 범위에 대한 제목을 알파벳 오름차순으로 쿼리합니다.

예시

1 db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "plot",
6 "query": "title:[man TO men] AND genres: Drama"
7 }
8 }
9 },
10 {
11 "$limit": 10
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1,
17 "genres": 1
18 }
19 }
20 ])
1[
2 { genres: [ 'Drama' ], title: 'The Wedding March' },
3 { genres: [ 'Drama' ], title: 'Maria Chapdelaine' },
4 { genres: [ 'Drama' ], title: 'Of Mice and Men' },
5 { genres: [ 'Drama' ], title: 'All the King's Men' },
6 { genres: [ 'Drama' ], title: 'Wuya yu maque' },
7 { genres: [ 'Drama' ], title: 'The Men' },
8 { genres: [ 'Drama' ], title: 'The Member of the Wedding' },
9 { genres: [ 'Drama' ], title: 'The Great Man' },
10 { genres: [ 'Drama' ], title: 'A Matter of Dignity' },
11 { genres: [ 'Drama' ], title: 'The Last Angry Man' }
12]

genres 필드에 drama라는 텀이 포함되고 영화 title 필드에 Man~Men 사이의 텀이 알파벳 순으로 포함되어 있기 때문에(결과에 Man, Maque, March, Maria, Matter, Member, Men 포함) 결과 내 문서가 일치합니다.

다음 예에서는 퍼지, 와일드카드 및 정규 표현식을 사용하여 영화 제목을 쿼리하기 위해 queryString 연산자를 사용합니다. 쿼리에는 title을 제외한 모든 필드를 제외하는 $project 단계가 포함되어 있습니다.

다음 쿼리에서는 퍼지 (~) 를 사용하여 title 필드에서 최대 두 자가 변형된 catch 유사 텀이 포함된 영화 제목에 대해 퍼지 검색을 수행합니다.

1db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "catch~2"
7 }
8 }
9 },
10 {
11 "$limit": 10
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1
17 }
18 }
19])
1[
2 { title: 'Catch-22' },
3 { title: 'Catch That Girl' },
4 { title: 'Catch That Kid' },
5 { title: 'Catch a Fire' },
6 { title: 'Catch Me Daddy' },
7 { title: 'Death Watch' },
8 { title: 'Patch Adams' },
9 { title: "Batch '81" },
10 { title: 'Briar Patch' },
11 { title: 'Night Watch' }
12]

다음 쿼리는 와일드카드 표현식을 사용하여 문자가 포함된 영화 제목에 대한 Atlas Search의 title 필드에 cou*t?* * 는 추가 문자 수를 나타내고 ? 는 단일 문자를 나타냅니다.

1db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "cou*t?*"
7 }
8 }
9 },
10 {
11 "$limit": 5
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1
17 }
18 }
19])
1[
2 { title: 'A Day in the Country' },
3 { title: 'Diary of a Country Priest' },
4 { title: 'Cry, the Beloved Country' },
5 { title: 'The Country Girl' },
6 { title: 'Raintree County' }
7]

필드에 또는 라는 용어가 title 포함되어 있기 때문에 결과의 문서가 일치하는 이유는 로 Country County cou 시작하여 임의의 수의 문자가 이어지는 문자(n 결과에서 )에 대한 쿼리 기준과 일치하는 또는 입니다. 그 다음 t 다음에 하나 이상의 문자가 옵니다(r country y county 결과에서 의 경우 ).

다음 쿼리는 정규 표현식을 사용하여 title 필드에서 tal 문자로 시작하고 tal 뒤에 y 또는 ian 문자가 오는 문자가 포함된 영화 제목을 검색합니다.

1db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "/.tal(y|ian)/"
7 }
8 }
9 },
10 {
11 "$limit": 5
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1
17 }
18 }
19])
1[
2 { title: 'The Italian' },
3 { title: 'Journey to Italy' },
4 { title: 'Divorce Italian Style' },
5 { title: 'Marriage Italian Style' },
6 { title: 'Jealousy, Italian Style' }
7]

결과의 문서가 일치하는 이유는 title 필드에 Italy 또는 Italian(이)라는 용어가 포함되어 있고, tal 다음에 y(결과의 Italy에서와 같이) 또는 ian(결과의 Italian에서와 같이)이 있는 모든 문자(결과의 I)에 대한 쿼리 기준과 일치하기 때문입니다.

돌아가기