문서 메뉴
문서 홈
/
MongoDB 아틀라스
/ /

사용자 지정 분석기를 정의하고 발음 구별 부호 무감지 Atlas Search 쿼리를 실행하는 방법을 참조하세요.

이 페이지의 내용

  • Atlas Search 인덱스 만들기
  • 컬렉션 검색

이 튜토리얼에서는 사용자 지정 분석기 를 사용하는 인덱스를 만들고 sample_mflix.movies 컬렉션에 대해 발음 구별 부호를 구분하지 않는 쿼리를 실행하는 방법을 설명합니다. 다음 단계를 안내합니다.

  1. sample_mflix.movies collection의 titlegenres 필드에 Atlas Search 검색 인덱스를 설정합니다.

  2. 와일드카드 및 텍스트 연산자를 사용하여 컬렉션의 필드에 title genres 대해 Atlas Search 복합 쿼리를 sample_mflix.movies 실행합니다.

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

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

이 섹션에서는 sample_mflix.movies collection의 titlegenres 필드에 대해 Atlas Search 검색 인덱스를 생성합니다.

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

  2. 이미 표시되어 있지 않은 경우 Projects 탐색 모음의 프로젝트 메뉴에서 원하는 프로젝트를 선택합니다.

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

2

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

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

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

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

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

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

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

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

3
4
5
  1. Index Name 필드에 diacritic-insensitive-tutorial를 입력합니다.

    참고

    인덱스 이름을 default으로 지정하면 $search 파이프라인 단계를 사용할 때 index 매개 변수를 지정할 필요가 없습니다. 그렇지 않으면 index 매개 변수를 사용하여 인덱스 이름을 지정해야 합니다.

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

6

genrestitle 필드에 대한 이 인덱스 정의는 다음을 사용하여 사용자 지정 분석기 diacriticFolder 를 지정합니다.

  • 키워드 토크나이저는 전체 입력을 단일 토큰으로 토큰화합니다.

  • icuFolding 토큰 필터는 악센트 제거 및 대/소문자 접기와 같은 문자 접기를 적용합니다.

인덱스 정의는 genrestitle 필드에 대한 문자열 유형을 지정합니다. 또한 title 필드에 diacriticFolder 이)라는 사용자 지정 분석기를 적용합니다.

Atlas user 인터페이스에서 Atlas Search Visual Editor 또는 Atlas Search JSON Editor 를 사용하여 인덱스를 생성합니다.

  1. Next를 클릭합니다.

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

  3. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  4. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  5. Analyzer Name 필드에 diacriticFolder을 입력합니다.

  6. Tokenizer 이 접혀 있는 경우 확장하고 드롭다운에서 keyword 를 선택합니다.

  7. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  8. 드롭다운에서 icuFolding을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  9. 인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.

  10. Field Mappings 섹션에서 Add Field Mapping 을 클릭하여 title 필드에 사용자 지정 분석기를 적용합니다.

  11. Field Name 드롭다운에서 title 을 선택하고 Data Type 드롭다운에서 문자열 을 선택합니다.

  12. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 diacriticFolder 선택합니다.

  13. Add를 클릭합니다.

  14. Add Field Mapping 을 다시 클릭하여 genres 필드를 인덱싱합니다.

  15. Field Name 드롭다운에서 genres 을 선택하고 Data Type 드롭다운에서 문자열 을 선택합니다.

  16. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

  1. 기본 정의를 다음으로 바꿉니다.

1{
2 "mappings": {
3 "fields": {
4 "genres": {
5 "type": "string"
6 },
7 "title": {
8 "analyzer": "diacriticFolder",
9 "type": "string"
10 }
11 }
12 },
13 "analyzers": [{
14 "charFilters": [],
15 "name": "diacriticFolder",
16 "tokenizer": {
17 "type": "keyword"
18 },
19 "tokenFilters": [{
20 "type": "icuFolding"
21 }]
22 }]
23}
  1. Next를 클릭합니다.

7
8

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

9

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


언어 선택 드롭다운 메뉴를 사용하여 이 섹션에 있는 예제의 언어를 설정합니다.


복합 연산자 를 사용하여 두 개 이상의 연산자를 단일 쿼리로 결합할 수 있습니다. 이 섹션의 샘플 쿼리에서는 복합 연산자 를 사용하여 여러 연산자를 사용하여 movies collection의 titlegenres 필드를 쿼리합니다.

이 섹션에서는 Atlas cluster에 연결하고 compound 연산자를 사용하여 sample_mflix.movies collection에 대해 샘플 쿼리를 실행합니다.

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

  2. 이미 표시되어 있지 않은 경우 Projects 탐색 모음의 프로젝트 메뉴에서 원하는 프로젝트를 선택합니다.

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

2

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

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

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

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

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

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

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

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

3

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

4

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

5

이 쿼리는 단계를 $search 통해 compound 연산자로 collection을 쿼리합니다. The compound operator uses the following clauses:

  • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

  • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

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

1[
2 {
3 "$search" : {
4 "index": "diacritic-insensitive-tutorial",
5 "compound" : {
6 "must": [{
7 "wildcard" : {
8 "query" : "alle*",
9 "path": "title",
10 "allowAnalyzedField": true
11 }
12 }],
13 "should": [{
14 "text": {
15 "query" : "Drama",
16 "path" : "genres"
17 }
18 }]
19 }
20 }
21 }
22]
SCORE: 1.2084882259368896 _id: "573a13a1f29313caabd07bb6"
plot: "A group of hip retro teenage outsiders become involved in an interscho…"
genres:
0: "Drama"
1: "Family"
2: "Sport"
runtime: 103
title: "Alley Cats Strike"
SCORE: 1.179288625717163 _id: "573a13b1f29313caabd382a2"
plot: "Famous pianist Zetterstrèm returns home to his native Denmark, to give…"
genres:
0: "Drama"
1: "Romance"
2: "Sci-Fi"
runtime: 88
title: "Allegro"
SCORE: 1 _id: "573a1397f29313caabce5f15"
plot: "An enthusiastic filmmaker thinks he's come up with a totally original …"
genres:
0: "Animation"
1: "Comedy"
2: "Fantasy"
runtime: 75
title: "Allegro non troppo"
SCORE: 1 _id: "573a13d1f29313caabd8f84b"
plot: "The eleven year old cycling talent Freddy is the son of a butcher in a…"
genres:
0: "Comedy"
runtime: 100
title: "Allez, Eddy!"
6

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

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

1

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

2

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

use sample_mflix
3

이 쿼리는 단계를 $search 통해 compound 연산자로 collection을 쿼리합니다. The compound operator uses the following clauses:

  • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

  • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

이 쿼리는 $project 단계를 사용하여 다음을 수행합니다.

  • titlegenres을 제외한 모든 필드를 제외합니다.

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

1db.movies.aggregate([
2 {
3 "$search" : {
4 "index": "diacritic-insensitive-tutorial",
5 "compound" : {
6 "must": [{
7 "wildcard" : {
8 "query" : "alle*",
9 "path": "title",
10 "allowAnalyzedField": true
11 }
12 }],
13 "should": [{
14 "text": {
15 "query" : "Drama",
16 "path" : "genres"
17 }
18 }]
19 }
20 }
21 },
22 {
23 "$project" : {
24 "_id" : 0,
25 "title" : 1,
26 "genres" : 1,
27 "score" : { "$meta": "searchScore" }
28 }
29 }
30])
{
genres: [ 'Drama', 'Family', 'Sport' ],
title: 'Alley Cats Strike',
score: 1.2084882259368896
},
{
genres: [ 'Drama', 'Romance', 'Sci-Fi' ],
title: 'Allegro',
score: 1.179288625717163
},
{
genres: [ 'Animation', 'Comedy', 'Fantasy' ],
title: 'Allegro non troppo',
score: 1
},
{
genres: [ 'Comedy' ],
title: 'Allez, Eddy!',
score: 1
}

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

1

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

2

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

3

이 쿼리는 다음 compound 연산자 절을 사용하여 collection을 쿼리합니다.

  • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

  • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

이 쿼리는 $project 단계를 사용하여 다음을 수행합니다.

  • titlegenres을 제외한 모든 필드를 제외합니다.

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

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

  1. Aggregations 탭을 클릭합니다.

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

파이프라인 단계
쿼리
$search
{
"index": "diacritic-insensitive-tutorial",
"compound": {
"must": [{
"wildcard": {
"path": "title",
"query": "alle*",
"allowAnalyzedField": true
}
}],
"should": [{
"text": {
"query": "Drama",
"path": "genres"
}
}]
}
}
$project
{
"_id": 0,
"title": 1,
"genres": 1,
"score": {
"$meta": "searchScore"
}
}

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

{
genres: [ 'Drama', 'Family', 'Sport' ],
title: 'Alley Cats Strike',
score: 1.2084882259368896
},
{
genres: [ 'Drama', 'Romance', 'Sci-Fi' ],
title: 'Allegro',
score: 1.179288625717163
},
{
genres: [ 'Animation', 'Comedy', 'Fantasy' ],
title: 'Allegro non troppo',
score: 1
},
{
genres: [ 'Comedy' ],
title: 'Allez, Eddy!',
score: 1
}

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

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

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

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

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

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

    • Atlas cluster에 대한 연결을 설정합니다.

    • 다음 compound 연산자 절을 사용하여 collection을 쿼리합니다.

      • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

      • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

      이 쿼리는 $project 단계를 사용하여 다음을 수행합니다.

      • titlegenres을 제외한 모든 필드를 제외합니다.

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

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

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class DiacriticInsensitiveExample
    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 .Must(Builders<MovieDocument>.Search.Wildcard(movie => movie.Title, "alle*", true))
    26 .Should(Builders<MovieDocument>.Search.Text(movie => movie.Genres, "Drama")),
    27 indexName: "diacritic-insensitive-tutorial")
    28 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    29 .Include(movie => movie.Title)
    30 .Include(movie => movie.Genres)
    31 .Exclude(movie => movie.Id)
    32 .MetaSearchScore(movie => movie.Score))
    33 .ToList();
    34
    35 // print results
    36 foreach (var movie in results)
    37 {
    38 Console.WriteLine(movie.ToJson());
    39 }
    40 }
    41}
    42
    43[BsonIgnoreExtraElements]
    44public class MovieDocument
    45{
    46 [BsonIgnoreIfDefault]
    47 public ObjectId Id { get; set; }
    48 public string [] Genres { get; set; }
    49 public string Title { get; set; }
    50 public double Score { get; set; }
    51}
  2. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

3
dotnet run diacritic-insensitive-example.csproj
{ "genres" : ["Drama", "Family", "Sport"], "title" : "Alley Cats Strike", "score" : 1.2084882259368896 }
{ "genres" : ["Drama", "Romance", "Sci-Fi"], "title" : "Allegro", "score" : 1.1792886257171631 }
{ "genres" : ["Animation", "Comedy", "Fantasy"], "title" : "Allegro non troppo", "score" : 1.0 }
{ "genres" : ["Comedy"], "title" : "Allez, Eddy!", "score" : 1.0 }

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

1
  1. diacritic-insensitive.go이라는 파일을 만듭니다.

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

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

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

    • Atlas cluster에 대한 연결을 설정합니다.

    • 다음 compound 연산자 절을 사용하여 collection을 쿼리합니다.

      • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

      • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

      이 쿼리는 $project 단계를 사용하여 다음을 수행합니다.

      • titlegenres을 제외한 모든 필드를 제외합니다.

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

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

    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.M{
    25 "index": "diacritic-insensitive-tutorial",
    26 "compound": bson.M{
    27 "must": bson.M{
    28 "wildcard": bson.M{
    29 "path": "title",
    30 "query": "alle*",
    31 "allowAnalyzedField": true,
    32 },
    33 },
    34 "should": bson.D{
    35 {"text", bson.M{
    36 "path": "genres",
    37 "query": "Drama"}}},
    38 },
    39 }}}
    40 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"genres", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}}
    41
    42 // run pipeline
    43 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, 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 diacritic-insensitive.go
    [{genres [Drama Family Sport]} {title Alley Cats Strike} {score 1.2084882259368896}]
    [{genres [Drama Romance Sci-Fi]} {title Allegro} {score 1.179288625717163}]
    [{genres [Animation Comedy Fantasy]} {title Allegro non troppo} {score 1}]
    [{genres [Comedy]} {title Allez, Eddy!} {score 1}]

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

1
junit
4.11 또는 그 이상의 버전
mongodb-driver-sync
4.3.0 또는 그 이상의 버전
slf4j-log4j12
1.7.30 또는 그 이상의 버전
2
  1. DiacriticInsensitive.java이라는 파일을 만듭니다.

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

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

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

    • Atlas cluster에 대한 연결을 설정합니다.

    • 다음 compound 연산자 절을 사용하여 collection을 쿼리합니다.

      • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

      • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

      이 쿼리는 $project 단계를 사용하여 다음을 수행합니다.

      • titlegenres을 제외한 모든 필드를 제외합니다.

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

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

    1import static com.mongodb.client.model.Aggregates.project;
    2import static com.mongodb.client.model.Projections.*;
    3import com.mongodb.client.MongoClient;
    4import com.mongodb.client.MongoClients;
    5import com.mongodb.client.MongoCollection;
    6import com.mongodb.client.MongoDatabase;
    7import org.bson.Document;
    8import java.util.Arrays;
    9import java.util.List;
    10
    11public class DiacriticInsensitive {
    12 public static void main(String[] args) {
    13 // define clauses
    14 List<Document> mustClauses =
    15 List.of( new Document("wildcard",
    16 new Document("path", "title")
    17 .append("query", "alle*")
    18 .append("allowAnalyzedField", true)));
    19 List<Document> shouldClauses =
    20 List.of( new Document("text",
    21 new Document("query", "Drama")
    22 .append("path", "genres")));
    23 // define pipeline
    24 Document agg = new Document( "$search",
    25 new Document("index", "diacritic-insensitive-tutorial")
    26 .append("compound",
    27 new Document("must", mustClauses)
    28 .append("should", shouldClauses)));
    29
    30 // connect to your Atlas cluster
    31 String uri = "<connection-string>";
    32
    33 try (MongoClient mongoClient = MongoClients.create(uri)) {
    34 // set namespace
    35 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
    36 MongoCollection<Document> collection = database.getCollection("movies");
    37
    38 // run pipeline and print results
    39 collection.aggregate(Arrays.asList(agg,
    40 project(fields(
    41 excludeId(),
    42 include("title"),
    43 include("genres"),
    44 computed("score", new Document("$meta", "searchScore"))))))
    45 .forEach(doc -> System.out.println(doc.toJson()));
    46 }
    47 }
    48}

    참고

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

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

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

    javac DiacriticInsensitive.java
    java DiacriticInsensitive
    {"genres": ["Drama", "Family", "Sport"], "title": "Alley Cats Strike", "score": 1.2084882259368896}
    {"genres": ["Drama", "Romance", "Sci-Fi"], "title": "Allegro", "score": 1.179288625717163}
    {"genres": ["Animation", "Comedy", "Fantasy"], "title": "Allegro non troppo", "score": 1.0}
    {"genres": ["Comedy"], "title": "Allez, Eddy!", "score": 1.0}

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

1
mongodb-driver-kotlin-coroutine
4.10.0 또는 그 이상의 버전
2
  1. DiacriticInsensitive.kt이라는 파일을 만듭니다.

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

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

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

    • Atlas cluster에 대한 연결을 설정합니다.

    • 다음 compound 연산자 절을 사용하여 collection을 쿼리합니다.

      • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

      • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

      이 쿼리는 $project 단계를 사용하여 다음을 수행합니다.

      • titlegenres을 제외한 모든 필드를 제외합니다.

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

    • AggregateFlow 인스턴스에서 쿼리와 일치하는 문서를 인쇄합니다.

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

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

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

    Document{{genres=[Drama, Family, Sport], title=Alley Cats Strike, score=1.2084882259368896}}
    Document{{genres=[Drama, Romance, Sci-Fi], title=Allegro, score=1.179288625717163}}
    Document{{genres=[Animation, Comedy, Fantasy], title=Allegro non troppo, score=1.0}}
    Document{{genres=[Comedy], title=Allez, Eddy!, score=1.0}}

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

1
  1. diacritic-insensitive.js이라는 파일을 만듭니다.

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

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

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

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

    • 다음 compound 연산자 절을 사용하여 collection을 쿼리합니다.

      • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

      • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

      이 쿼리는 $project 단계를 사용하여 다음을 수행합니다.

      • titlegenres을 제외한 모든 필드를 제외합니다.

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

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

    1const { MongoClient } = require("mongodb");
    2
    3// Replace the uri string with your MongoDB deployment's connection string.
    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': {
    20 'index': 'diacritic-insensitive-tutorial',
    21 'compound': {
    22 'must': [{
    23 'wildcard': {
    24 'query': "alle*",
    25 'path': "title",
    26 'allowAnalyzedField': true
    27 }
    28 }],
    29 'should': [{'text': {'query': 'Drama', 'path': 'genres'}}]
    30 }}},
    31 { '$project': { '_id': 0, 'title': 1 , 'genres': 1, 'score': {'$meta': 'searchScore'}}}];
    32
    33 // run pipeline
    34 const result = await coll.aggregate(agg);
    35
    36 // print results
    37 await result.forEach((doc) => console.log(doc));
    38
    39 } finally {
    40 await client.close();
    41 }
    42}
    43run().catch(console.dir);
  3. 샘플을 실행하기 전에 <connection-string>을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

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

    node diacritic-insensitive.js
    {
    genres: [ 'Drama', 'Family', 'Sport' ],
    title: 'Alley Cats Strike',
    score: 1.2084882259368896
    }
    {
    genres: [ 'Drama', 'Romance', 'Sci-Fi' ],
    title: 'Allegro',
    score: 1.179288625717163
    }
    {
    genres: [ 'Animation', 'Comedy', 'Fantasy' ],
    title: 'Allegro non troppo',
    score: 1
    }
    {
    genres: [ 'Comedy' ],
    title: 'Allez, Eddy!',
    score: 1
    }

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

1
  1. diacritic-insensitive.py이라는 파일을 만듭니다.

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

    다음 코드 예제에서는:

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

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

    • 다음 compound 연산자 절을 사용하여 collection을 쿼리합니다.

      • must 절에서 와일드카드 연산자를 사용하여 alle 이라는 용어로 시작하는 영화 제목을 검색할 수 있습니다.

      • should 절을 사용하여 텍스트 연산자를 사용하여 Drama 장르에 대한 기본 설정을 지정합니다.

      이 쿼리는 $project 단계를 사용하여 다음을 수행합니다.

      • titlegenres을 제외한 모든 필드를 제외합니다.

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

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

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

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

    python diacritic-insensitive.py
    {'genres': ['Drama', 'Family', 'Sport'], 'title': 'Alley Cats Strike', 'score': 1.2084882259368896}
    {'genres': ['Drama', 'Romance', 'Sci-Fi'], 'title': 'Allegro', 'score': 1.179288625717163}
    {'genres': ['Animation', 'Comedy', 'Fantasy'], 'title': 'Allegro non troppo', 'score': 1.0}
    {'genres': ['Comedy'], 'title': 'Allez, Eddy!', 'score': 1.0}

결과의 첫 번째 문서는 title 필드에서 사용한 diacriticFolder 사용자 지정 분석기가 해당 값에 문자 접기를 적용했기 때문에 title 필드의 발음 부호를 포함합니다. 전체 문자열(또는 구문)을 단일 토큰으로 토큰화하는 키워드 토크나이저를 사용했기 때문에 Atlas Search는 제목이 쿼리 용어 alle 로 시작하는 문서를 반환합니다.

또는 제목 필드에 사용되는 사용자 지정 분석기에서 키워드 토크나이저 대신 표준 토크나이저를 지정할 수 있습니다. 표준 토크나이저의 경우, Atlas Search 결과에는 "Desde allè"과 같이 쿼리 용어 alle 에 대한 단어의 시작 부분에 제목이 시작되거나 나타나는 문서가 포함됩니다. 이를 테스트하려면 인덱스 정의 를 편집하여 17 줄의 keyword 토크나이저를 standard 토크나이저로 바꾸고 인덱스 정의를 저장한 다음 샘플 쿼리를 실행합니다.

돌아가기

모든 결과

다음

실행 방법