Docs Menu
Docs Home
/
MongoDB Atlas
/ /

Atlas Search에서 자동 완성 기능 사용 방법

이 페이지의 내용

  • 자동 완성 기능으로 인덱스 정의하기
  • 자동 완성 쿼리 실행

이 튜토리얼에서는 Atlas Search 인덱스를 만들고 자동 완성 쿼리를 실행하여 단어의 일부분에 대한 결과를 반환하는 방법에 대해 설명합니다. 이는 애플리케이션의 검색 필드에 문자를 더 많이 입력하여 결과를 더 정확하게 조회하는 데 유용합니다. Atlas Search 자동 완성 연산자를 사용하여 Atlas Search 자동 완성 유형으로 인덱스 하는 필드 값을 쿼리할 수 있습니다.

이 튜토리얼에서는 구체적으로 다음을 설명합니다.

  • sample_mflix.movies 컬렉션에 대한 자동 완성 유형을 사용하여 Atlas Search 인덱스를 설정하는 방법.

  • 부분 단어에 대한 sample_mflix.movies 컬렉션의 인덱싱된 필드에 대해 Atlas Search 쿼리를 실행하는 방법

시작하기 전에 Atlas 클러스터가 필수구성 요소에 설명된 요건을 충족하는지 확인하십시오.

Atlas Search 인덱스를 생성하려면 프로젝트에 대한 Project Data Access Admin 이상의 액세스 권한이 있어야 합니다.

Atlas Search autocomplete 유형을 사용하면 자동 완성을 위해 문자열 필드의 텍스트 값을 인덱스할 수 있습니다. 자동 완성 연산자를 사용하여 autocomplete 유형으로 인덱싱된 필드를 쿼리할 수 있습니다.

이 섹션에서는 자동 완성을 위해 titleplot 필드를 인덱싱하는 Atlas Search 인덱스를 만듭니다. 인덱스 정의는 다음 작업을 수행합니다.

  • 각 단어의 왼쪽부터 시작하여 2~ 15자 사이의 인덱스 가능한 텀을 생성합니다(tokenization: edgeGram).

  • 인덱스 및 쿼리의 액센트 또는 기호와 같은 분음 부호를 무시하고 분음 부호가 있거나 없는 결과를 반환합니다(foldDiacritics: true).

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.

    클러스터 페이지가 표시됩니다.

2
  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

3
4
  • 안내를 따라 진행하고자 할 때는 Atlas Search Visual Editor를 선택합니다.

  • 원시 인덱스 정의를 편집하고 싶다면, Atlas Search JSON Editor을 선택합니다.

5
  1. Index Name 필드에 autocomplete-tutorial를 입력합니다.

    인덱스 이름을 default로 지정하면 $search 파이프라인 단계에서 index 매개변수를 지정할 필요가 없습니다. 인덱스에 사용자 지정 이름을 지정하는 경우 index 매개변수에 이 이름을 지정해야 합니다.

  2. Database and Collection 섹션에서 sample_mflix 데이터베이스를 찾고 movies 컬렉션을 선택합니다.

6

Atlas 사용자 인터페이스에서 Atlas Search Visual Editor 또는 Atlas Search JSON Editor를 사용하여 인덱스를 생성할 수 있습니다.

  1. Next를 클릭합니다.

  2. Refine Your Index를 클릭합니다.

  3. Field Mappings 섹션에서 Add Field을(를) 클릭합니다.

  4. 아직 선택되지 않았다면 Quick Start for Text Fields를 클릭하고 드롭다운에서 Search-as-you-type 템플릿을 선택하세요.

  5. Field Name 드롭다운 메뉴에서 title을(를) 선택합니다.

  6. Add를 클릭합니다.

  7. plot 필드에 대해 단계 c부터 e까지 반복하십시오.

  8. Save Changes를 클릭합니다.

  1. 기본 정의를 다음 인덱스 정의로 바꿉니다.

    {
    "mappings": {
    "dynamic": false,
    "fields": {
    "title": {
    "type": "autocomplete",
    "tokenization": "edgeGram",
    "foldDiacritics": true,
    "minGrams": 2,
    "maxGrams": 15
    },
    "plot": {
    "type": "autocomplete",
    "tokenization": "edgeGram",
    "foldDiacritics": true,
    "minGrams": 2,
    "maxGrams": 15
    }
    }
    }
    }
  2. Next를 클릭합니다.

구성 옵션에 대한 자세한 내용은 autocomplete 필드 속성 구성을 참조하세요.

7
8

인덱스가 작성 중임을 보여주는 모달 창이 표시됩니다. Close 버튼을 클릭합니다.

9

인덱스 작성에는 약 1분 정도가 소요됩니다. 작성하는 동안 Status 열은 Build in Progress을 읽습니다. 작성이 완료되면 Status 열에 Active이 표시됩니다.


Select your language 드롭다운 메뉴를 사용하여 이 페이지에서 예시의 언어를 설정합니다.


autocomplete 연산자는 불완전한 입력 문자열에서 문자 시퀀스가 포함된 단어나 구를 검색합니다. autocomplete 연산자를 사용하여 쿼리하려는 필드는 컬렉션의 인덱스 정의에 있는 자동 완성 데이터 유형으로 인덱싱되어야 합니다. 자동 완성을 위해 인덱스를 구성하는 방법을 알아보려면 자동 완성을 위해 필드 인덱싱하는 방법을 참조하세요.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.

    Clusters(클러스터) 페이지가 표시됩니다.

2

사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.

  1. 사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.

  2. Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. cluster의 Browse Collections 버튼을 클릭합니다.

  2. 데이터베이스를 확장하고 컬렉션을 선택합니다.

  3. 컬렉션의 Search Indexes 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

3

쿼리할 인덱스 오른쪽에 있는 Query 버튼을 클릭합니다.

4

Edit Query 을 클릭하면 JSON 형식의 기본 쿼리 구문 샘플을 볼 수 있습니다.

5

다음 쿼리를 복사하여 Query Editor에 붙여 넣은 다음 Query Editor에서 Search 버튼을 클릭합니다.

[
{
$search: {
index: "autocomplete-tutorial",
autocomplete: {
query: "ger",
path: "title"
}
}
}
]
SCORE: 6.085907459259033 _id: "573a1390f29313caabcd50e5"
plot: "The cartoonist, Winsor McCay, brings the Dinosaurus back to life in th…"
genre: Array
runtime: 12
SCORE: 6.085907459259033 _id: "573a1393f29313caabcddae1"
plot: "Edmund, a young boy who lives in war-devastated Germany after the Seco…"
genres: Array
runtime: 78
SCORE: 6.085907459259033 _id: "573a1397f29313caabce6b75"
plot: "Germany in Autumn does not have a plot per se; it mixes documentary fo…"
genres: Array
runtime: 123
SCORE: 6.085907459259033 _id: "573a1397f29313caabce77b5"
plot: "Germany 1939. Hans and Lene marry the day before the war breaks out, a…"
genres: Array
runtime: 123
SCORE: 6.085907459259033 _id: "573a13d4f29313caabd99fa2"
plot: "A documentary on the German artist that includes glimpses at his studi…"
genres: Array
runtime: 97
SCORE: 6.046686172485352 _id: "573a1399f29313caabcedb50"
plot: "The story of the Apache chief and his armed resistance to the US Gover…"
genres: Array
runtime: 115
SCORE: 5.8947296142578125 _id: "573a13a5f29313caabd15dae"
num_mflix_comments: 1
genres: Array
runtime: 83
SCORE: 5.826231956481934 _id: "573a139bf29313caabcf36bd"
plot: "Geri sets up a chess game to play his greatest opponent - himself."
genres: Array
runtime: 4
SCORE: 5.772464752197266 _id: "573a13d2f29313caabd922de"
plot: "The true story of an Argentine family who lived with Josef Mengele wit…"
genres: Array
runtime: 93
SCORE: 5.772464752197266 _id: "573a13b4f29313caabd41bb7"
plot: "In 1928, Dr. Max Gerson, a German-Jewish researcher, stumbled upon a t…"
genres: Array
countries: Array
6

Search Tester는 반환하는 문서의 모든 필드를 표시하지 않을 수 있습니다. 쿼리 경로에 지정한 필드를 비롯하여 모든 필드를 보려면 결과에서 문서를 펼칩니다.

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.

    Clusters(클러스터) 페이지가 표시됩니다.

2

사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.

  1. 사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.

  2. Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. cluster의 Browse Collections 버튼을 클릭합니다.

  2. 데이터베이스를 확장하고 컬렉션을 선택합니다.

  3. 컬렉션의 Search Indexes 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

3

쿼리할 인덱스 오른쪽에 있는 Query 버튼을 클릭합니다.

4

JSON 형식의 기본 쿼리 구문 샘플을 보려면 Edit Query을(를) 클릭합니다.

5

다음 쿼리를 복사하여 Query Editor에 붙여 넣은 다음 Query Editor에서 Search 버튼을 클릭합니다.

[
{
$search: {
index: "autocomplete-tutorial",
compound: {
should: [{
autocomplete: {
query: "pri",
path: "title"
}
},
{
autocomplete: {
query: "pri",
path: "plot"
}
}],
minimumShouldMatch: 1
}
}
}
]
SCORE: 7.52535343170166 _id: "573a13e7f29313caabdc80cd"
plot: "Prison Terminal: The Last Days of Private Jack Hall is a moving cinema…"
genre: Array
runtime: 40
SCORE: 7.235145568847656 _id: "573a13adf29313caabd2b504"
plot: "Now settled in Genovia, Princess Mia faces a new revelation: she is be…"
genres: Array
runtime: 113
SCORE: 7.202958106994629 _id: "573a13b5f29313caabd43816"
plot: "A young fugitive prince and princess must stop a villain who unknowing…"
genres: Array
runtime: 116
SCORE: 7.201740264892578 _id: "573a139af29313caabcf0d54"
plot: "The first wedding anniversary of Princess Odette and Prince Derek is d…"
genres: Array
runtime: 71
SCORE: 7.174992561340332 _id: "573a1399f29313caabceeead"
plot: "Jane Austen's classic novel about the prejudice that occurred between …"
genres: Array
runtime: 327
SCORE: 7.173888206481934 _id: "573a13c1f29313caabd63a21"
plot: "A princess whose country has been invaded goes into hiding in Louisian…"
genres: Array
countries: Array
SCORE: 7.163987159729004 _id: "573a13eef29313caabdd51a6"
plot: "Follows the people racing to bring the hot new 3D printing technology …"
genres: Array
runtime: 100
SCORE: 7.155245780944824 _id: "573a13a5f29313caabd14adf"
plot: "When her father is captured by The Sheriff of Nottingham and Prince Jo…"
genres: Array
runtime: 88
SCORE: 7.146618843078613 _id: "573a139af29313caabcf0efc"
plot: "An Egyptian prince learns of his identity as a Hebrew and, later his d…"
genres: Array
runtime: 99
SCORE: 7.132328987121582 _id: "573a139af29313caabcf003b"
plot: "Two Russian soldiers, one battle-seasoned and the other barely into hi…"
genres: Array
runtime: 99
6

Search Tester는 반환하는 문서의 모든 필드를 표시하지 않을 수 있습니다. 쿼리 경로에 지정한 필드를 비롯하여 모든 필드를 보려면 결과에서 문서를 펼칩니다.

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1

터미널 창에서 mongosh 를 열고 클러스터에 연결합니다. 연결에 대한 자세한 지침은 mongosh 를 통한 연결을 참조하세요.

2

mongosh 프롬프트에서 다음 명령을 실행합니다.

use sample_mflix
3

다음 쿼리는 title 필드에 ger 문자가 포함된 영화를 검색합니다. 쿼리에는 출력을 20개의 결과로 제한하는 $limit 단계와 title을 제외한 모든 필드를 제외하는 $project 단계가 포함됩니다.

db.movies.aggregate([
{
$search: {
"index": "autocomplete-tutorial",
"autocomplete": {
"path": "title",
"query": "ger"
}
}
},
{
$limit: 20
},
{
$project: {
"_id": 0,
"title": 1
}
}
])
{ title: "Gertie the Dinosaur" },
{ title: "Germany Year Zero" },
{ title: "Germany in Autumn" },
{ title: "Germany Pale Mother" },
{ title: "Gerhard Richter - Painting" },
{ title: "Geronimo: An American Legend" },
{ title: "How to Live in the German Federal Republic" },
{ title: "Geri's Game" },
{ title: "The Gerson Miracle" },
{ title: "The German Doctor" },
{ title: "From Caligari to Hitler: German Cinema in the Age of the Masse"},
{ title: "From Caligari to Hitler: German Cinema in the Age of the Masses"},
{ title: "Gèraldine" },
{ title: "Gervaise" },
{ title: "Gertrud" },
{ title: "Germinal" },
{ title: "Gerry" },
{ title: "Gerontophilia" },
{ title: "Pionery-geroi" },
{ title: "The Good German" }

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1

터미널 창에서 mongosh 를 열고 클러스터에 연결합니다. 연결에 대한 자세한 지침은 mongosh 를 통한 연결을 참조하세요.

2

mongosh 프롬프트에서 다음 명령을 실행합니다.

use sample_mflix
3

다음 쿼리는 titleplot 필드에서 pri 문자가 있는 영화를 검색합니다. 쿼리에는 출력을 5개의 결과로 제한하는 $limit 단계와 titleplot을 제외한 모든 필드를 제외하는 $project 단계가 포함됩니다.

1db.movies.aggregate([
2 {
3 "$search": {
4 "index": "autocomplete-tutorial",
5 "compound": {
6 "should": [{
7 "autocomplete": {
8 "query": "pri",
9 "path": "title"
10 }
11 },
12 {
13 "autocomplete": {
14 "query": "pri",
15 "path": "plot"
16 }
17 }],
18 "minimumShouldMatch": 1
19 }
20 }
21 },
22 {
23 "$limit": 5
24 },
25 {
26 "$project": {
27 "_id": 0,
28 "title": 1,
29 "plot": 1
30 }
31 }
32])
{
plot: 'Prison Terminal: The Last Days of Private Jack Hall is a moving cinema verite documentary that breaks through the walls of one of Americas oldest maximum security prisons to tell the story ...',
title: 'Prison Terminal: The Last Days of Private Jack Hall'
}
{
plot: 'Now settled in Genovia, Princess Mia faces a new revelation: she is being primed for an arranged marriage to an English suitor.',
title: 'The Princess Diaries 2: Royal Engagement'
}
{
plot: 'A young fugitive prince and princess must stop a villain who unknowingly threatens to destroy the world with a special dagger that enables the magic sand inside to reverse time.',
title: 'Prince of Persia: The Sands of Time'
}
{
plot: 'The first wedding anniversary of Princess Odette and Prince Derek is distracted by field fires set by Knuckles. His master Clavius, wants to conquer the world, and he needs to capture a ...',
title: 'The Swan Princess: Escape from Castle Mountain'
}
{
plot: "Jane Austen's classic novel about the prejudice that occurred between the 19th century classes and the pride which would keep lovers apart.",
title: 'Pride and Prejudice'
}

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1

MongoDB Compass를 열고 cluster에 연결합니다. 연결에 대한 자세한 내용은 Compass를 통한 연결을 참조하세요.

2

Database 화면에서 sample_mflix 데이터베이스를 클릭한 다음 movies collection을 클릭합니다.

3

쿼리는 다음 파이프라인 단계를 사용합니다:

  • $search를 입력하여 autocomplete 연산자를 사용하여 title 필드에서 문자 ger로 시작하는 단어를 검색합니다.

  • $limit 단계를 사용하여 출력 결과를 20개로 제한합니다.

  • $project 단계에서 title을 제외한 모든 필드를 제외합니다.

MongoDB Compass에서 이 쿼리를 실행하려면 다음 안내를 따르세요.

  1. Aggregations 탭을 클릭합니다.

  2. Select...를 클릭한 다음 드롭다운에서 단계를 선택하고 해당 단계에 대한 쿼리를 추가하여 다음 파이프라인 단계를 각각 구성합니다. 단계를 추가하려면 Add Stage을 클릭합니다.

    movies colection의 Aggregations 탭에서 드롭다운에서 단계를 선택하고 해당 단계에 대한 쿼리를 추가하여 다음 각 파이프라인 단계를 구성합니다. Add Stage를 클릭하여 단계를 추가합니다.

    파이프라인 단계
    쿼리

    $search

    {
    "index": "autocomplete-tutorial",
    "autocomplete": {
    "query": "ger",
    "path": "title"
    }
    }

    $limit

    20

    $project

    {
    "_id": 0,
    "title": 1,
    }

Auto Preview를 활성화한 경우 MongoDB Compass는 $autocomplete 파이프라인 단계 옆에 다음 문서를 표시합니다.

1{ title: "Gertie the Dinosaur" },
2{ title: "Germany Year Zero" },
3{ title: "Germany in Autumn" },
4{ title: "Germany Pale Mother" },
5{ title: "Gerhard Richter - Painting" },
6{ title: "Geronimo: An American Legend" },
7{ title: "How to Live in the German Federal Republic" },
8{ title: "Geri's Game" },
9{ title: "The Gerson Miracle" },
10{ title: "The German Doctor" },
11{ title: "From Caligari to Hitler: German Cinema in the Age of the Masse"},
12{ title: "From Caligari to Hitler: German Cinema in the Age of the Masses"},
13{ title: "Gèraldine" },
14{ title: "Gervaise" },
15{ title: "Gertrud" },
16{ title: "Germinal" },
17{ title: "Gerry" },
18{ title: "Gerontophilia" },
19{ title: "Pionery-geroi" },
20{ title: "The Good German" }

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1

MongoDB Compass를 열고 cluster에 연결합니다. 연결에 대한 자세한 내용은 Compass를 통한 연결을 참조하세요.

2

Database 화면에서 sample_mflix 데이터베이스를 클릭한 다음 movies collection을 클릭합니다.

3

쿼리는 다음 파이프라인 단계를 사용합니다:

  • $searchautocomplete 연산자를 사용하여 pri 문자로 시작하는 단어를 titleplot 필드에서 검색합니다.

  • $limit 단계를 사용하여 출력 결과를 5개로 제한합니다.

  • titleplot을 제외한 모든 필드를 제외하기 위한 $project 단계

MongoDB Compass에서 이 쿼리를 실행하려면 다음 안내를 따르세요.

  1. Aggregations 탭을 클릭합니다.

  2. Select...를 클릭한 다음 드롭다운에서 단계를 선택하고 해당 단계에 대한 쿼리를 추가하여 다음 파이프라인 단계를 각각 구성합니다. 단계를 추가하려면 Add Stage을 클릭합니다.

    movies colection의 Aggregations 탭에서 드롭다운에서 단계를 선택하고 해당 단계에 대한 쿼리를 추가하여 다음 각 파이프라인 단계를 구성합니다. Add Stage를 클릭하여 단계를 추가합니다.

    파이프라인 단계
    쿼리

    $search

    {
    "index": "autocomplete-tutorial",
    "compound": {
    "should": [{
    "autocomplete": {
    "query": "pri",
    "path": "title"
    }
    },
    {
    "autocomplete": {
    "query": "pri",
    "path": "plot"
    }
    }],
    "minimumShouldMatch": 1
    }
    }

    $limit

    5

    $project

    {
    "_id": 0,
    "title": 1,
    "plot": 1
    }

Auto Preview를 활성화한 경우 MongoDB Compass는 $autocomplete 파이프라인 단계 옆에 다음 문서를 표시합니다.

1 {
2 plot: 'Prison Terminal: The Last Days of Private Jack Hall is a moving cinema verite documentary that breaks through the walls of one of Americas oldest maximum security prisons to tell the story ...',
3 title: 'Prison Terminal: The Last Days of Private Jack Hall'
4 }
5 {
6 plot: 'Now settled in Genovia, Princess Mia faces a new revelation: she is being primed for an arranged marriage to an English suitor.',
7 title: 'The Princess Diaries 2: Royal Engagement'
8 }
9 {
10 plot: 'A young fugitive prince and princess must stop a villain who unknowingly threatens to destroy the world with a special dagger that enables the magic sand inside to reverse time.',
11 title: 'Prince of Persia: The Sands of Time'
12 }
13 {
14 plot: 'The first wedding anniversary of Princess Odette and Prince Derek is distracted by field fires set by Knuckles. His master Clavius, wants to conquer the world, and he needs to capture a ...',
15 title: 'The Swan Princess: Escape from Castle Mountain'
16 }
17 {
18 plot: "Jane Austen's classic novel about the prejudice that occurred between the 19th century classes and the pride which would keep lovers apart.",
19 title: 'Pride and Prejudice'
20 }

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1
  1. basic-autocomplete-example라는 새 디렉토리를 만들고 dotnet new 명령으로 프로젝트를 초기화합니다.

    mkdir basic-autocomplete-example
    cd basic-autocomplete-example
    dotnet new console
  2. .NET/C# 드라이버를 프로젝트에 종속성으로 추가합니다.

    dotnet add package MongoDB.Driver
2
  1. Program.cs 파일의 내용을 다음 코드로 바꿉니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • mongodb 패키지 및 종속성을 가져옵니다.

    • Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $search를 입력하여 autocomplete 연산자를 사용하여 title 필드에서 문자 ger로 시작하는 단어를 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 20개로 제한합니다.

      • $project 단계에서 title을 제외한 모든 필드를 제외합니다.

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class AutocompleteBasicExample
    8{
    9 private const string MongoConnectionString = "<connection-string>";
    10
    11 public static void Main(string[] args)
    12 {
    13 // allow automapping of the camelCase database fields to our MovieDocument
    14 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
    15 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
    16
    17 // connect to your Atlas cluster
    18 var mongoClient = new MongoClient(MongoConnectionString);
    19 var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
    20 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
    21
    22 // define and run pipeline
    23 var results = moviesCollection.Aggregate()
    24 .Search(Builders<MovieDocument>.Search.Autocomplete(movie => movie.Title, "ger"), indexName: "autocomplete-tutorial")
    25 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    26 .Include(movie => movie.Title)
    27 .Exclude(movie => movie.Id))
    28 .Limit(20)
    29 .ToList();
    30
    31 // print results
    32 foreach (var movie in results)
    33 {
    34 Console.WriteLine(movie.ToJson());
    35 }
    36 }
    37}
    38
    39[BsonIgnoreExtraElements]
    40public class MovieDocument
    41{
    42 [BsonIgnoreIfDefault]
    43 public ObjectId Id { get; set; }
    44 public string Title { get; set; }
    45}
  2. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

3
dotnet run basic-autocomplete-example.csproj
{ "title" : "Gertie the Dinosaur" }
{ "title" : "Germany Year Zero" }
{ "title" : "Germany in Autumn" }
{ "title" : "Germany Pale Mother" }
{ "title" : "Gerhard Richter - Painting" }
{ "title" : "Geronimo: An American Legend" }
{ "title" : "How to Live in the German Federal Republic" }
{ "title" : "Geri's Game" }
{ "title" : "The Gerson Miracle" }
{ "title" : "The German Doctor" }
{ "title" : "From Caligari to Hitler: German Cinema in the Age of the Masses" }
{ "title" : "From Caligari to Hitler: German Cinema in the Age of the Masses" }
{ "title" : "Gèraldine" }
{ "title" : "Gervaise" }
{ "title" : "Gertrud" }
{ "title" : "Germinal" }
{ "title" : "Gerry" }
{ "title" : "Gerontophilia" }
{ "title" : "Pionery-geroi" }
{ "title" : "The Good German" }

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1
  1. advanced-autocomplete-example라는 새 디렉토리를 만들고 dotnet new 명령으로 프로젝트를 초기화합니다.

    mkdir advanced-autocomplete-example
    cd advanced-autocomplete-example
    dotnet new console
  2. .NET/C# 드라이버를 프로젝트에 종속성으로 추가합니다.

    dotnet add package MongoDB.Driver
2
  1. Program.cs 파일의 내용을 다음 코드로 바꿉니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • mongodb 패키지 및 종속성을 가져옵니다.

    • Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $searchautocomplete 연산자를 사용하여 pri 문자로 시작하는 단어를 titleplot 필드에서 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 5개로 제한합니다.

      • titleplot을 제외한 모든 필드를 제외하기 위한 $project 단계

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class AutocompleteAdvancedExample
    8{
    9 private const string MongoConnectionString = "<connection-string>";
    10
    11 public static void Main(string[] args)
    12 {
    13 // allow automapping of the camelCase database fields to our MovieDocument
    14 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
    15 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
    16
    17 // connect to your Atlas cluster
    18 var mongoClient = new MongoClient(MongoConnectionString);
    19 var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
    20 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
    21
    22 // define and run pipeline
    23 var results = moviesCollection.Aggregate()
    24 .Search(Builders<MovieDocument>.Search.Compound()
    25 .Should(Builders<MovieDocument>.Search.Autocomplete(movie => movie.Title, "pri"))
    26 .Should(Builders<MovieDocument>.Search.Autocomplete(movie => movie.Plot, "pri"))
    27 .MinimumShouldMatch(1),
    28 indexName: "autocomplete-tutorial")
    29 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    30 .Include(movie => movie.Plot)
    31 .Include(movie => movie.Title)
    32 .Exclude(movie => movie.Id))
    33 .Limit(5)
    34 .ToList();
    35
    36 // print results
    37 foreach (var movie in results)
    38 {
    39 Console.WriteLine(movie.ToJson());
    40 }
    41 }
    42}
    43
    44[BsonIgnoreExtraElements]
    45public class MovieDocument
    46{
    47 [BsonIgnoreIfDefault]
    48 public ObjectId Id { get; set; }
    49 public string Plot { get; set; }
    50 public string Title { get; set; }
    51}
  2. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

3
dotnet run advanced-autocomplete-example.csproj
{
"plot" : "Prison Terminal: The Last Days of Private Jack
Hall is a moving cinema verite documentary that breaks
through the walls of one of Americas oldest maximum
security prisons to tell the story ...",
"title" : "Prison Terminal: The Last Days of Private Jack Hall"
}
{
"plot" : "Now settled in Genovia, Princess Mia faces a new
revelation: she is being primed for an arranged marriage to
an English suitor.",
"title" : "The Princess Diaries 2: Royal Engagement"
}
{
"plot" : "A young fugitive prince and princess must stop a
villain who unknowingly threatens to destroy the world with
a special dagger that enables the magic sand inside to
reverse time.",
"title" : "Prince of Persia: The Sands of Time"
}
{
"plot" : "The first wedding anniversary of Princess Odette
and Prince Derek is distracted by field fires set by
Knuckles. His master Clavius, wants to conquer the world,
and he needs to capture a ...",
"title" : "The Swan Princess: Escape from Castle Mountain"
}
{
"plot" : "Jane Austen's classic novel about the prejudice
that occurred between the 19th century classes and the
pride which would keep lovers apart.",
"title" : "Pride and Prejudice"
}

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1
  1. autocomplete-query.go이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 autocomplete-query.go 파일에 붙여넣습니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • mongodb 패키지 및 종속성을 가져옵니다.

    • Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $search를 입력하여 autocomplete 연산자를 사용하여 title 필드에서 문자 ger로 시작하는 단어를 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 20개로 제한합니다.

      • $project 단계에서 title을 제외한 모든 필드를 제외합니다.

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1package main
    2
    3import (
    4 "context"
    5 "fmt"
    6
    7 "go.mongodb.org/mongo-driver/bson"
    8 "go.mongodb.org/mongo-driver/mongo"
    9 "go.mongodb.org/mongo-driver/mongo/options"
    10)
    11
    12func main() {
    13 // connect to your Atlas cluster
    14 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("<connection-string>"))
    15 if err != nil {
    16 panic(err)
    17 }
    18 defer client.Disconnect(context.TODO())
    19
    20 // set namespace
    21 collection := client.Database("sample_mflix").Collection("movies")
    22
    23 // define pipeline stages
    24 searchStage := bson.D{{"$search", bson.D{{"index", "autocomplete-tutorial"}, {"autocomplete", bson.D{{"query", "ger"}, {"path", "title"}}}}}}
    25 limitStage := bson.D{{"$limit", 20}}
    26 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}}}}
    27 // run pipeline
    28 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage, projectStage})
    29 if err != nil {
    30 panic(err)
    31 }
    32
    33 // print results
    34 var results []bson.D
    35 if err = cursor.All(context.TODO(), &results); err != nil {
    36 panic(err)
    37 }
    38 for _, result := range results {
    39 fmt.Println(result)
    40 }
    41}
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. 다음 명령을 실행하여 컬렉션을 쿼리합니다.

    go run autocomplete-query.go
    [{title Gertie the Dinosaur}]
    [{title Germany Year Zero}]
    [{title Germany in Autumn}]
    [{title Germany Pale Mother}]
    [{title Gerhard Richter - Painting}]
    [{title Geronimo: An American Legend}]
    [{title How to Live in the German Federal Republic}]
    [{title Geri's Game}]
    [{title The Gerson Miracle}]
    [{title The German Doctor}]
    [{title From Caligari to Hitler: German Cinema in the Age of the Masses}]
    [{title From Caligari to Hitler: German Cinema in the Age of the Masses}]
    [{title Gèraldine}]
    [{title Gervaise}]
    [{title Gertrud}]
    [{title Germinal}]
    [{title Gerry}]
    [{title Gerontophilia}]
    [{title Pionery-geroi}]
    [{title The Good German}]

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1
  1. autocomplete-query.go이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 autocomplete-query.go 파일에 붙여넣습니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • mongodb 패키지 및 종속성을 가져옵니다.

    • Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $searchautocomplete 연산자를 사용하여 pri 문자로 시작하는 단어를 titleplot 필드에서 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 5개로 제한합니다.

      • titleplot을 제외한 모든 필드를 제외하기 위한 $project 단계

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1package main
    2
    3import (
    4 "context"
    5 "fmt"
    6
    7 "go.mongodb.org/mongo-driver/bson"
    8 "go.mongodb.org/mongo-driver/mongo"
    9 "go.mongodb.org/mongo-driver/mongo/options"
    10)
    11
    12func main() {
    13 // connect to your Atlas cluster
    14 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("<connection-string>"))
    15 if err != nil {
    16 panic(err)
    17 }
    18 defer client.Disconnect(context.TODO())
    19
    20 // set namespace
    21 collection := client.Database("sample_mflix").Collection("movies")
    22
    23 // define pipeline stages
    24 searchStage := bson.D{
    25 {"$search", bson.D{
    26 {"index", "autocomplete-tutorial"},
    27 {"compound", bson.D{
    28 {"should", bson.A{
    29 bson.D{
    30 {"autocomplete", bson.D{{"query", "pri"}, {"path", "title"}}},
    31 },
    32 bson.D{
    33 {"autocomplete", bson.D{{"query", "pri"}, {"path", "plot"}}},
    34 },
    35 }},
    36 {"minimumShouldMatch", 1},
    37 }},
    38 }},
    39 }
    40 limitStage := bson.D{{"$limit", 5}}
    41 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}}}}
    42 // run pipeline
    43 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage, projectStage})
    44 if err != nil {
    45 panic(err)
    46 }
    47
    48 // print results
    49 var results []bson.D
    50 if err = cursor.All(context.TODO(), &results); err != nil {
    51 panic(err)
    52 }
    53 for _, result := range results {
    54 fmt.Println(result)
    55 }
    56}
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. 다음 명령을 실행하여 컬렉션을 쿼리합니다.

    go run autocomplete-query.go
    [
    {plot Prison Terminal: The Last Days of Private Jack Hall is a moving cinema verite documentary that breaks through the walls of one of Americas oldest maximum security prisons to tell the story ...}
    {title Prison Terminal: The Last Days of Private Jack Hall}
    ]
    [
    {plot Now settled in Genovia, Princess Mia faces a new revelation: she is being primed for an arranged marriage to an English suitor.}
    {title The Princess Diaries 2: Royal Engagement}
    ]
    [
    {plot A young fugitive prince and princess must stop a villain who unknowingly threatens to destroy the world with a special dagger that enables the magic sand inside to reverse time.}
    {title Prince of Persia: The Sands of Time}
    ]
    [
    {plot The first wedding anniversary of Princess Odette and Prince Derek is distracted by field fires set by Knuckles. His master Clavius, wants to conquer the world, and he needs to capture a ...}
    {title The Swan Princess: Escape from Castle Mountain}
    ]
    [
    {plot Jane Austen's classic novel about the prejudice that occurred between the 19th century classes and the pride which would keep lovers apart.}
    {title Pride and Prejudice}
    ]

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1

junit

4.11 또는 그 이상의 버전

mongodb-driver-sync

4.3.0 또는 그 이상의 버전

slf4j-log4j12

1.7.30 또는 그 이상의 버전

2
  1. AutocompleteQuery.java이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 AutocompleteQuery.java 파일에 붙여넣습니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • mongodb 패키지 및 종속성을 가져옵니다.

    • Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $search를 입력하여 autocomplete 연산자를 사용하여 title 필드에서 문자 ger로 시작하는 단어를 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 20개로 제한합니다.

      • $project 단계에서 title을 제외한 모든 필드를 제외합니다.

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1import static com.mongodb.client.model.Aggregates.limit;
    2import static com.mongodb.client.model.Aggregates.project;
    3import static com.mongodb.client.model.Projections.excludeId;
    4import static com.mongodb.client.model.Projections.fields;
    5import static com.mongodb.client.model.Projections.include;
    6import com.mongodb.client.MongoClient;
    7import com.mongodb.client.MongoClients;
    8import com.mongodb.client.MongoCollection;
    9import com.mongodb.client.MongoDatabase;
    10import org.bson.Document;
    11import java.util.Arrays;
    12
    13public class AutocompleteQuery {
    14
    15 public static void main(String[] args) {
    16 // connect to your Atlas cluster
    17 String uri = "<connection-string>";
    18
    19 try (MongoClient mongoClient = MongoClients.create(uri)) {
    20 // set namespace
    21 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
    22 MongoCollection<Document> collection = database.getCollection("movies");
    23
    24 // define pipeline
    25 Document agg = new Document("$search",
    26 new Document("index", "autocomplete-tutorial")
    27 .append("autocomplete", new Document("query", "ger").append("path", "title")));
    28 // run pipeline and print results
    29 collection.aggregate(Arrays.asList(agg,
    30 limit(20),
    31 project(fields(excludeId(), include("title"))))).forEach(doc -> System.out.println(doc.toJson()));
    32 }
    33 }
    34}

    참고

    Maven 환경에서 샘플 코드를 실행하려면 파일의 가져오기 문 위에 다음을 추가하세요.

    package com.mongodb.drivers;
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. AutocompleteQuery.java 파일을 컴파일하고 실행합니다.

    javac AutocompleteQuery.java
    java AutocompleteQuery
    {"title": "Gertie the Dinosaur"}
    {"title": "Germany Year Zero"}
    {"title": "Germany in Autumn"}
    {"title": "Germany Pale Mother"}
    {"title": "Gerhard Richter - Painting"}
    {"title": "Geronimo: An American Legend"}
    {"title": "How to Live in the German Federal Republic"}
    {"title": "Geri's Game"}
    {"title": "The Gerson Miracle"}
    {"title": "The German Doctor"}
    {"title": "From Caligari to Hitler: German Cinema in the Age of the Masses"}
    {"title": "From Caligari to Hitler: German Cinema in the Age of the Masses"}
    {"title": "Gèraldine"}
    {"title": "Gervaise"}
    {"title": "Gertrud"}
    {"title": "Germinal"}
    {"title": "Gerry"}
    {"title": "Gerontophilia"}
    {"title": "Pionery-geroi"}
    {"title": "The Good German"}

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1

junit

4.11 또는 그 이상의 버전

mongodb-driver-sync

4.3.0 또는 그 이상의 버전

slf4j-log4j12

1.7.30 또는 그 이상의 버전

2
  1. AutocompleteQuery.java이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 AutocompleteQuery.java 파일에 붙여넣습니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • mongodb 패키지 및 종속성을 가져옵니다.

    • Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $searchautocomplete 연산자를 사용하여 pri 문자로 시작하는 단어를 titleplot 필드에서 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 5개로 제한합니다.

      • titleplot을 제외한 모든 필드를 제외하기 위한 $project 단계

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1import static com.mongodb.client.model.Aggregates.limit;
    2import static com.mongodb.client.model.Aggregates.project;
    3import static com.mongodb.client.model.Projections.excludeId;
    4import static com.mongodb.client.model.Projections.fields;
    5import static com.mongodb.client.model.Projections.include;
    6import com.mongodb.client.MongoClient;
    7import com.mongodb.client.MongoClients;
    8import com.mongodb.client.MongoCollection;
    9import com.mongodb.client.MongoDatabase;
    10import org.bson.Document;
    11import java.util.Arrays;
    12
    13public class AutocompleteQuery {
    14
    15 public static void main(String[] args) {
    16 // connect to your Atlas cluster
    17 String uri = "<connection-string>";
    18
    19 try (MongoClient mongoClient = MongoClients.create(uri)) {
    20 // set namespace
    21 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
    22 MongoCollection<Document> collection = database.getCollection("movies");
    23
    24 // define pipeline
    25 Document agg = new Document("$search",
    26 new Document("index", "autocomplete-tutorial")
    27 .append("compound",
    28 new Document("should", Arrays.asList(new Document("autocomplete",
    29 new Document("query", "pri")
    30 .append("path", "title")),
    31 new Document("autocomplete",
    32 new Document("query", "pri")
    33 .append("path", "plot"))))
    34 .append("minimumShouldMatch", 1L)));
    35 // run pipeline and print results
    36 collection.aggregate(Arrays.asList(agg,
    37 limit(5),
    38 project(fields(excludeId(), include("title"))))).forEach(doc -> System.out.println(doc.toJson()));
    39 }
    40 }
    41}

    참고

    Maven 환경에서 샘플 코드를 실행하려면 파일의 가져오기 문 위에 다음을 추가하세요.

    package com.mongodb.drivers;
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. AutocompleteQuery.java 파일을 컴파일하고 실행합니다.

    javac AutocompleteQuery.java
    java AutocompleteQuery
    {
    plot: 'Prison Terminal: The Last Days of Private Jack Hall is a moving cinema verite documentary that breaks through the walls of one of Americas oldest maximum security prisons to tell the story ...',
    title: 'Prison Terminal: The Last Days of Private Jack Hall'
    }
    {
    plot: 'Now settled in Genovia, Princess Mia faces a new revelation: she is being primed for an arranged marriage to an English suitor.',
    title: 'The Princess Diaries 2: Royal Engagement'
    }
    {
    plot: 'A young fugitive prince and princess must stop a villain who unknowingly threatens to destroy the world with a special dagger that enables the magic sand inside to reverse time.',
    title: 'Prince of Persia: The Sands of Time'
    }
    {
    plot: 'The first wedding anniversary of Princess Odette and Prince Derek is distracted by field fires set by Knuckles. His master Clavius, wants to conquer the world, and he needs to capture a ...',
    title: 'The Swan Princess: Escape from Castle Mountain'
    }
    {
    plot: "Jane Austen's classic novel about the prejudice that occurred between the 19th century classes and the pride which would keep lovers apart.",
    title: 'Pride and Prejudice'
    }

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1

mongodb-driver-kotlin-coroutine

4.10.0 또는 그 이상의 버전

2
  1. AutocompleteQuery.kt이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 AutocompleteQuery.kt 파일에 붙여넣습니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • mongodb 패키지 및 종속성을 가져옵니다.

    • Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $search를 입력하여 autocomplete 연산자를 사용하여 title 필드에서 문자 ger로 시작하는 단어를 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 20개로 제한합니다.

      • $project 단계에서 title을 제외한 모든 필드를 제외합니다.

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7
    8fun main() {
    9 // connect to your Atlas cluster
    10 val uri = "<connection-string>"
    11 val mongoClient = MongoClient.create(uri)
    12
    13 // set namespace
    14 val database = mongoClient.getDatabase("sample_mflix")
    15 val collection = database.getCollection<Document>("movies")
    16
    17 runBlocking {
    18 // define pipeline
    19 val agg = Document(
    20 "\$search",
    21 Document("index", "autocomplete-tutorial")
    22 .append("autocomplete", Document("query", "ger").append("path", "title"))
    23 )
    24
    25 // run pipeline and print results
    26 val resultsFlow = collection.aggregate<Document>(
    27 listOf(
    28 agg,
    29 limit(20),
    30 project(fields(excludeId(), include("title")))
    31 )
    32 )
    33 resultsFlow.collect { println(it) }
    34 }
    35 mongoClient.close()
    36}
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. AutocompleteQuery.kt 파일을 실행합니다.

    IDE에서 AutocompleteQuery.kt 프로그램을 실행하면 다음 문서가 인쇄됩니다.

    Document{{title=Germany in Autumn}}
    Document{{title=Germany Pale Mother}}
    Document{{title=Gertie the Dinosaur}}
    Document{{title=Geronimo: An American Legend}}
    Document{{title=How to Live in the German Federal Republic}}
    Document{{title=Geri's Game}}
    Document{{title=The Gerson Miracle}}
    Document{{title=The German Doctor}}
    Document{{title=From Caligari to Hitler: German Cinema in the Age of the Masses}}
    Document{{title=From Caligari to Hitler: German Cinema in the Age of the Masses}}
    Document{{title=Gervaise}}
    Document{{title=Germinal}}
    Document{{title=Gerry}}
    Document{{title=Gèraldine}}
    Document{{title=Pionery-geroi}}
    Document{{title=Rece do gèry}}
    Document{{title=The Good German}}
    Document{{title=Berlin Is in Germany}}
    Document{{title=Almanya: Welcome to Germany}}
    Document{{title=Hitler: A Film from Germany}}

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1

mongodb-driver-kotlin-coroutine

4.10.0 또는 그 이상의 버전

2
  1. AutocompleteQuery.kt이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 AutocompleteQuery.kt 파일에 붙여넣습니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • mongodb 패키지 및 종속성을 가져옵니다.

    • Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $searchautocomplete 연산자를 사용하여 pri 문자로 시작하는 단어를 titleplot 필드에서 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 5개로 제한합니다.

      • titleplot을 제외한 모든 필드를 제외하기 위한 $project 단계

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7
    8fun main() {
    9 // connect to your Atlas cluster
    10 val uri = "<connection-string>"
    11 val mongoClient = MongoClient.create(uri)
    12
    13 // set namespace
    14 val database = mongoClient.getDatabase("sample_mflix")
    15 val collection = database.getCollection<Document>("movies")
    16
    17 runBlocking {
    18 // define pipeline
    19 val agg = Document(
    20 "\$search",
    21 Document("index", "autocomplete-tutorial")
    22 .append(
    23 "compound",
    24 Document(
    25 "should", listOf(
    26 Document(
    27 "autocomplete",
    28 Document("query", "pri")
    29 .append("path", "title")
    30 ),
    31 Document(
    32 "autocomplete",
    33 Document("query", "pri")
    34 .append("path", "plot")
    35 )
    36 )
    37 )
    38 .append("minimumShouldMatch", 1L)
    39 )
    40 )
    41
    42 // run pipeline and print results
    43 val resultsFlow = collection.aggregate<Document>(
    44 listOf(
    45 agg,
    46 limit(5),
    47 project(fields(excludeId(), include("title", "plot")))
    48 )
    49 )
    50 resultsFlow.collect { println(it) }
    51 }
    52 mongoClient.close()
    53}
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. AutocompleteQuery.kt 파일을 실행합니다.

    IDE에서 AutocompleteQuery.kt 프로그램을 실행하면 다음 문서가 인쇄됩니다.

    Document{{plot=Prison Terminal: The Last Days of Private Jack Hall is a moving cinema verite documentary that breaks through the walls of one of Americas oldest maximum security prisons to tell the story ..., title=Prison Terminal: The Last Days of Private Jack Hall}}
    Document{{plot=Now settled in Genovia, Princess Mia faces a new revelation: she is being primed for an arranged marriage to an English suitor., title=The Princess Diaries 2: Royal Engagement}}
    Document{{plot=A young fugitive prince and princess must stop a villain who unknowingly threatens to destroy the world with a special dagger that enables the magic sand inside to reverse time., title=Prince of Persia: The Sands of Time}}
    Document{{plot=The first wedding anniversary of Princess Odette and Prince Derek is distracted by field fires set by Knuckles. His master Clavius, wants to conquer the world, and he needs to capture a ..., title=The Swan Princess: Escape from Castle Mountain}}
    Document{{plot=Jane Austen's classic novel about the prejudice that occurred between the 19th century classes and the pride which would keep lovers apart., title=Pride and Prejudice}}

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1
  1. autocomplete-query.js이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 autocomplete-query.js 파일에 붙여넣습니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • MongoDB의 Node.js 드라이버인 mongodb를 가져옵니다.

    • MongoClient 클래스의 인스턴스를 만들어 Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $search를 입력하여 autocomplete 연산자를 사용하여 title 필드에서 문자 ger로 시작하는 단어를 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 20개로 제한합니다.

      • $project 단계에서 title을 제외한 모든 필드를 제외합니다.

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1const { MongoClient } = require("mongodb");
    2
    3// connect to your Atlas cluster
    4const uri =
    5 "<connection-string>";
    6
    7const client = new MongoClient(uri);
    8
    9async function run() {
    10 try {
    11 await client.connect();
    12
    13 // set namespace
    14 const database = client.db("sample_mflix");
    15 const coll = database.collection("movies");
    16
    17 // define pipeline
    18 const agg = [
    19 {$search: {index: "autocomplete-tutorial", autocomplete: {query: "ger", path: "title"}}},
    20 {$limit: 20},
    21 {$project: {_id: 0,title: 1}}
    22 ];
    23 // run pipeline
    24 const result = await coll.aggregate(agg);
    25
    26 // print results
    27 await result.forEach((doc) => console.log(doc));
    28 } finally {
    29 await client.close();
    30 }
    31}
    32run().catch(console.dir);
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. 다음 명령을 실행하여 컬렉션을 쿼리합니다.

    node autocompelte-query.js
    { title: 'Gertie the Dinosaur' }
    { title: 'Germany Year Zero' }
    { title: 'Germany in Autumn' }
    { title: 'Germany Pale Mother' }
    { title: 'Gerhard Richter - Painting' }
    { title: 'Geronimo: An American Legend' }
    { title: 'How to Live in the German Federal Republic' }
    { title: "Geri's Game" }
    { title: 'The Gerson Miracle' }
    { title: 'The German Doctor' }
    { title: 'From Caligari to Hitler: German Cinema in the Age of the Masses' }
    { title: 'From Caligari to Hitler: German Cinema in the Age of the Masses' }
    { title: 'Gèraldine' }
    { title: 'Gervaise' }
    { title: 'Gertrud' }
    { title: 'Germinal' }
    { title: 'Gerry' }
    { title: 'Gerontophilia' }
    { title: 'Pionery-geroi' }
    { title: 'The Good German' }

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1
  1. autocomplete-query.js이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 autocomplete-query.js 파일에 붙여넣습니다.

    이 코드 예시에서는 다음 작업을 수행합니다:

    • MongoDB의 Node.js 드라이버인 mongodb를 가져옵니다.

    • MongoClient 클래스의 인스턴스를 만들어 Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $searchautocomplete 연산자를 사용하여 pri 문자로 시작하는 단어를 titleplot 필드에서 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 5개로 제한합니다.

      • titleplot을 제외한 모든 필드를 제외하기 위한 $project 단계

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1const { MongoClient } = require("mongodb");
    2
    3// connect to your Atlas cluster
    4const uri =
    5 "<connection-string>";
    6
    7const client = new MongoClient(uri);
    8
    9async function run() {
    10 try {
    11 await client.connect();
    12
    13 // set namespace
    14 const database = client.db("sample_mflix");
    15 const coll = database.collection("movies");
    16
    17 // define pipeline
    18 const agg = [
    19 {
    20 '$search': {
    21 'index': 'autocomplete-tutorial',
    22 'compound': {
    23 'should': [
    24 {
    25 'autocomplete': {
    26 'query': 'pri',
    27 'path': 'title'
    28 }
    29 },
    30 {
    31 'autocomplete': {
    32 'query': 'pri',
    33 'path': 'plot'
    34 }
    35 }
    36 ],
    37 'minimumShouldMatch': 1
    38 }
    39 }
    40 },
    41 {
    42 '$limit': 5
    43 },
    44 {
    45 '$project': {
    46 '_id': 0,
    47 'title': 1,
    48 'plot': 1
    49 }
    50 }
    51 ];
    52 // run pipelines
    53 const result = await coll.aggregate(agg);
    54
    55 // print results
    56 await result.forEach((doc) => console.log(doc));
    57 } finally {
    58 await client.close();
    59 }
    60}
    61run().catch(console.dir);
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. 다음 명령을 실행하여 컬렉션을 쿼리합니다.

    node autocomplete-query.js
    {
    plot: 'Prison Terminal: The Last Days of Private Jack Hall is a moving cinema verite documentary that breaks through the walls of one of Americas oldest maximum security prisons to tell the story ...',
    title: 'Prison Terminal: The Last Days of Private Jack Hall'
    }
    {
    plot: 'Now settled in Genovia, Princess Mia faces a new revelation: she is being primed for an arranged marriage to an English suitor.',
    title: 'The Princess Diaries 2: Royal Engagement'
    }
    {
    plot: 'A young fugitive prince and princess must stop a villain who unknowingly threatens to destroy the world with a special dagger that enables the magic sand inside to reverse time.',
    title: 'Prince of Persia: The Sands of Time'
    }
    {
    plot: 'The first wedding anniversary of Princess Odette and Prince Derek is distracted by field fires set by Knuckles. His master Clavius, wants to conquer the world, and he needs to capture a ...',
    title: 'The Swan Princess: Escape from Castle Mountain'
    }
    {
    plot: "Jane Austen's classic novel about the prejudice that occurred between the 19th century classes and the pride which would keep lovers apart.",
    title: 'Pride and Prejudice'
    }

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

이 섹션에서는 Atlas 클러스터에 연결하고 autocomplete 연산자를 사용하여 sample_mflix.movies 컬렉션의 title 필드에 대해 샘플 쿼리를 실행합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목을 찾습니다.

1
  1. autocomplete-query.py이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 autocomplete.py 파일에 붙여넣습니다.

    다음 코드 예제에서는:

    • MongoDB의 Python 드라이버인 pymongo를 가져옵니다.

    • MongoClient 클래스의 인스턴스를 만들어 Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $search를 입력하여 autocomplete 연산자를 사용하여 title 필드에서 문자 ger로 시작하는 단어를 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 20개로 제한합니다.

      • $project 단계에서 title을 제외한 모든 필드를 제외합니다.

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1import pymongo
    2
    3# connect to your Atlas cluster
    4client = pymongo.MongoClient('<connection-string>')
    5
    6# define pipeline
    7pipeline = [
    8 {"$search": {"index": "autocomplete-tutorial", "autocomplete": {"query": "ger", "path": "title"}}},
    9 {"$limit": 20},
    10 {"$project": {"_id": 0, "title": 1}},
    11]
    12# run pipeline
    13result = client["sample_mflix"]["movies"].aggregate(pipeline)
    14
    15# print results
    16for i in result:
    17 print(i)
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. 다음 명령을 실행하여 컬렉션을 쿼리합니다.

    python autocomplete-query.py
    {'title': 'Gertie the Dinosaur'}
    {'title': 'Germany Year Zero'}
    {'title': 'Germany in Autumn'}
    {'title': 'Germany Pale Mother'}
    {'title': 'Gerhard Richter - Painting'}
    {'title': 'Geronimo: An American Legend'}
    {'title': 'How to Live in the German Federal Republic'}
    {'title': "Geri's Game"}
    {'title': 'The Gerson Miracle'}
    {'title': 'The German Doctor'}
    {'title': 'From Caligari to Hitler: German Cinema in the Age of the Masses'}
    {'title': 'From Caligari to Hitler: German Cinema in the Age of the Masses'}
    {'title': 'G\xe8raldine'}
    {'title': 'Gervaise'}
    {'title': 'Gertrud'}
    {'title': 'Germinal'}
    {'title': 'Gerry'}
    {'title': 'Gerontophilia'}
    {'title': 'Pionery-geroi'}
    {'title': 'The Good German'}

이 결과에서는 모든 제목의 단어 시작 부분에 문자 ger이(가) 나타납니다. title 필드가 edgeGram 토큰화 전략을 사용하여 인덱싱되었기 때문에 Atlas Search에서 지정된 쿼리 문자열로 시작하는 결과를 반환합니다. foldDiacritics부터 true까지로 설정했기 때문에 Atlas Search 결과에 GèraldineRece do gèry이(가) 포함됩니다.

이 섹션에서는 Atlas cluster에 연결하고 autocompletecompound 연산자를 사용하여 sample_mflix.movies 컬렉션의 titleplot 필드에 대해 샘플 쿼리를 실행 합니다. 이 샘플 쿼리는 문자 시퀀스를 사용하여 입력 문자열로 시작하는 단어가 포함된 영화 제목과 해당 줄거리를 찾습니다.

1
  1. autocomplete-query.py이라는 파일을 만듭니다.

  2. 다음 코드를 복사하여 autocomplete.py 파일에 붙여넣습니다.

    다음 코드 예제에서는:

    • pymongo, MongoDB의 Python 드라이버 및 dns 모듈을 가져옵니다. 이 모듈은 DNS 시드 리스트 연결 문자열을 사용하여 pymongoAtlas에 연결하는 데 필요합니다.

    • MongoClient 클래스의 인스턴스를 만들어 Atlas 클러스터에 대한 연결을 설정합니다.

    • 다음 파이프라인 단계를 사용합니다:

      • $searchautocomplete 연산자를 사용하여 pri 문자로 시작하는 단어를 titleplot 필드에서 검색합니다.

      • $limit 단계를 사용하여 출력 결과를 5개로 제한합니다.

      • titleplot을 제외한 모든 필드를 제외하기 위한 $project 단계

    • 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.

    1import pymongo
    2
    3# connect to your Atlas cluster
    4client = pymongo.MongoClient('<connection-string>')
    5
    6# define pipeline
    7pipeline = [
    8 {
    9 '$search': {
    10 'index': 'autocomplete-tutorial',
    11 'compound': {
    12 'should': [
    13 {
    14 'autocomplete': {
    15 'query': 'pri',
    16 'path': 'title'
    17 }
    18 }, {
    19 'autocomplete': {
    20 'query': 'pri',
    21 'path': 'plot'
    22 }
    23 }
    24 ],
    25 'minimumShouldMatch': 1
    26 }
    27 }
    28 },
    29 {
    30 '$limit': 5
    31 },
    32 {
    33 '$project': {
    34 '_id': 0, 'title': 1, 'plot': 1
    35 }
    36 }
    37]
    38# run pipeline
    39result = client["sample_mflix"]["movies"].aggregate(pipeline)
    40
    41# print results
    42for i in result:
    43 print(i)
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

  4. 다음 명령을 실행하여 컬렉션을 쿼리합니다.

    python autocomplete-query.py
    {
    plot: 'Prison Terminal: The Last Days of Private Jack Hall is a moving cinema verite documentary that breaks through the walls of one of Americas oldest maximum security prisons to tell the story ...',
    title: 'Prison Terminal: The Last Days of Private Jack Hall'
    }
    {
    plot: 'Now settled in Genovia, Princess Mia faces a new revelation: she is being primed for an arranged marriage to an English suitor.',
    title: 'The Princess Diaries 2: Royal Engagement'
    }
    {
    plot: 'A young fugitive prince and princess must stop a villain who unknowingly threatens to destroy the world with a special dagger that enables the magic sand inside to reverse time.',
    title: 'Prince of Persia: The Sands of Time'
    }
    {
    plot: 'The first wedding anniversary of Princess Odette and Prince Derek is distracted by field fires set by Knuckles. His master Clavius, wants to conquer the world, and he needs to capture a ...',
    title: 'The Swan Princess: Escape from Castle Mountain'
    }
    {
    plot: "Jane Austen's classic novel about the prejudice that occurred between the 19th century classes and the pride which would keep lovers apart.",
    title: 'Pride and Prejudice'
    }

이 결과에서는 pri 문자가 모든 제목과 줄거리의 단어 시작 부분에 나타납니다. titleplot 필드는 edgeGram 토큰화 전략을 사용하여 인덱싱되므로 Atlas Search는 지정된 쿼리 문자열로 시작하는 결과를 반환합니다.

돌아가기

Atlas Search 결과 정렬 방법