keyword
분석기는 문자열 또는 문자열 배열을 매개변수로 허용하고 이를 단일 용어(토큰)로 인덱스화합니다. 필드와 정확히 일치하는 항목만 반환됩니다. 모든 텍스트는 원래 대소문자를 그대로 유지합니다.
Refine Your Index을 선택하면 Atlas UI Index Configurations 섹션 내에 View text analysis of your selected index configuration 라는 제목의 섹션이 표시됩니다. 이 섹션을 확장하면 Atlas UI keyword
분석기 각 샘플 문자열에 대해 생성하는 인덱스 및 검색 토큰이 표시됩니다. Atlas UI Visual Editor에서 인덱스 생성하거나 편집할 때 keyword
분석기 내장 샘플 문서 및 쿼리 문자열에 대해 생성하는 토큰을 볼 수 있습니다.
중요
MongoDB Search는 분석기 토큰 크기가 32766 바이트를 초과하는 문자열 필드를 인덱스 하지 않습니다. 키워드 분석기 사용하는 경우 32766 바이트를 초과하는 문자열 필드는 인덱싱되지 않습니다.
예시
다음 예시 인덱스 정의는 분석기 title
사용하여 sample_mflix.movies 컬렉션 의 필드 에 대한 keyword
인덱스 지정합니다. 이 예시 따라하려면 클러스터에 샘플 데이터를 mongosh
로드하고 Create a Search
Index 를 사용하거나 MongoDB 검색 인덱스 만들기 튜토리얼의 단계에 따라 Atlas UI 의 페이지로 이동합니다.
그런 다음 movies
컬렉션 데이터 소스로 사용하여 예시 절차에 따라 mongosh
또는 Atlas UI Visual Editor 또는 JSON editor에서 인덱스 생성합니다.
Select your language 드롭다운 메뉴를 사용하여 이 페이지에서 예시의 언어를 설정합니다.
인덱스를 구성하려면 Refine Your Index을(를) 클릭합니다.
Index Configurations 섹션에서 Dynamic Mapping를 off로 전환합니다.
Field Mappings 섹션에서 Add Field 을 클릭하여 Add Field Mapping창을 엽니다.
Customized Configuration를 클릭합니다.
Field Name 드롭다운 메뉴에서
title
을(를) 선택합니다.Data Type 드롭다운을 클릭하고 아직 선택되지 않은 경우 String을(를) 선택합니다.
String Properties을 확장하고 다음과 같이 변경합니다:
인덱스 분석기
드롭다운 메뉴에서
lucene.keyword
을(를) 선택합니다.검색 분석기
드롭다운 메뉴에서
lucene.keyword
을(를) 선택합니다.인덱스 옵션
기본값
offsets
을(를) 사용합니다.Store
기본값
true
을(를) 사용합니다.위 내용 무시
기본 설정을 유지합니다.
규범
기본값
include
을(를) 사용합니다.Add를 클릭합니다.
Save Changes를 클릭합니다.
Create Search Index를 클릭합니다.
기본 인덱스 정의를 다음 인덱스 정의로 바꾸세요.
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "lucene.keyword" } } } } Next를 클릭합니다.
Create Search Index를 클릭합니다.
1 db.movies.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "title": { 7 "type": "string", 8 "analyzer": "lucene.keyword" 9 } 10 } 11 } 12 } 13 )
다음 쿼리는 title
필드에서 Class Action
이라는 단어를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
[ { "$search": { "text": { "query": "Class Action", "path": "title" } } } ] SCORE: 4.346973419189453 _id: "573a1399f29313caabcec6b7" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "Jeb Ward is an attorney who specializes in whistle blower, David vs. G…" genres: Array (2) imdb: Object languages: Array (1) lastupdated: "2015-09-06 00:42:51.167000000" metacritic: 58 num_mflix_comments: 2 plot: "Jeb Ward is an attorney who specializes in whistle blower, David vs. G…" poster: "https://m.media-amazon.com/images/M/MV5BNWY5Mjk4ZmItMTAzYS00NWE3LWEzYz…" rated: "R" released: 1991-03-15T00:00:00.000+00:00 runtime: 110 title: "Class Action" tomatoes: Object type: "movie" writers: Array (3) year: 1991
db.movies.aggregate([ { "$search": { "text": { "query": "Class Action", "path": "title" } } }, { "$project": { "_id": 0, "title": 1 } } ])
[ { title: 'Class Action' } ]
MongoDB Search는 lucene.keyword
분석기 사용하여 필드 의 텍스트에 대해 생성한 단일 토큰 Class Action
에 쿼리 텀 Class
Action
을 일치시켰기 때문에 문서 를 반환했습니다. 반면 MongoDB Search는 다음 쿼리 에 대해서는 결과를 반환하지 않습니다.
db.cases.aggregate([ { "$search": { "text": { "query": "action", "path": "title" } } } ])
컬렉션 의 많은 문서에 action
문자열이 포함되어 있지만 keyword
분석기 검색 텀 필드 의 전체 내용과 정확히 일치하는 문서만 일치시킵니다. 앞의 쿼리 의 경우 keyword
분석기 결과를 반환하지 않습니다. 그러나 표준 분석기 또는 단순 분석기를 사용하여 필드 인덱싱한 경우, MongoDB Search는 다음과 유사한 토큰을 생성하기 때문에 제목 필드 값이 Class
Action
인 문서를 포함하여 결과에 여러 문서를 반환합니다. 그런 다음 쿼리 텀과 일치시킵니다.
분석기 | 출력 토큰 | 경기 action | 경기 Class Action |
---|---|---|---|
키워드 분석기 토큰 |
| X | √ |
표준 분석기 토큰 |
| √ | √ |
간단한 분석기 토큰 |
| √ | √ |