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

결과에서 검색어 강조 표시

이 페이지의 내용

  • 구문
  • 옵션
  • 출력
  • 전제 조건
  • 제한 사항
  • 예제
  • 샘플 컬렉션
  • 샘플 인덱스
  • 샘플 쿼리

Atlas Search highlight 옵션은 검색어를 원래 컨텍스트로 표시하는 필드를 결과 집합에 추가합니다. 모든 $search 연산자와 함께 사용하여 반환된 문서에 나타나는 검색어와 인접한 텍스트 콘텐츠(있는 경우)를 함께 표시할 수 있습니다. highlight 결과가 $meta 필드의 일부로 반환됩니다.

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

{
$search: {
"index": "<index name>", // optional, defaults to "default"
"<operator>": { // such as "text", "compound", or "phrase"
<operator-specification>
},
"highlight": {
"path": "<field-to-search>",
"maxCharsToExamine": "<number-of-chars-to-examine>", // optional, defaults to 500,000
"maxNumPassages": "<number-of-passages>" // optional, defaults to 5
}
}
},
{
$project: {
"highlights": { "$meta": "searchHighlights" }
}
}
필드
유형
설명
필수 사항입니다.
path
문자열

검색할 문서 필드입니다. path 필드에는 다음이 포함될 수 있습니다.

  • 문자열

  • 문자열 배열

  • 멀티 분석기 사양

  • 문자열과 다중 분석기 사양의 조합이 포함된 배열입니다.

  • 와일드카드 문자 *

자세한 내용은 쿼리 경로 구성을 참조하세요.

maxCharsToExamine
int
필드에 대해 강조 표시를 수행할 때 문서에서 검사할 최대 문자 수입니다. 생략할 경우 기본값은 500,000 입니다. 즉, Atlas Search는 각 문서의 검색 필드에 있는 처음 500,000자만 검사하여 강조 표시합니다.
아니
maxNumPassages
int
각 필드에 대한 highlights 결과에서 문서당 반환할 높은 점수의 구절 수입니다. 구절은 한 문장의 대략적인 길이입니다. 생략하면 기본값은 5이며, 이는 각 문서에 대해 Atlas Search가 검색 텍스트와 일치하는 가장 높은 점수를 받은 상위 5개 구절을 반환한다는 의미입니다.
아니

"$meta": "searchHighlights" 필드에는 강조 표시된 결과가 포함되어 있습니다. 해당 필드는 원본 문서의 일부가 아니므로 $project 파이프라인 단계를 사용하여 쿼리 출력에 추가해야 합니다.

highlights필드는 다음 출력 필드를 포함하는 배열입니다.

필드
유형
설명
path
문자열
일치 항목을 반환한 문서 필드입니다.
texts
문서 배열
각 검색은 일치하는 텍스트와 주변 텍스트(있는 경우)를 포함하는 하나 이상의 객체를 반환합니다.
texts.value
문자열
일치 항목을 반환한 필드의 텍스트입니다.
texts.type
문자열

결과 유형. 값은 다음 중 하나일 수 있습니다.

  • hit - 결과에는 쿼리와 일치하는 용어가 포함됩니다.

  • text - 결과에는 일치하는 용어에 인접한 텍스트 콘텐츠가 포함됩니다.

score
튜브
일치하는 결과에 할당된 점수입니다. highlights 점수는 쿼리에 대한 highlights 객체의 관련성을 측정한 값입니다. 여러 개의 highlights 객체가 반환되는 경우 가장 관련성이 높은 highlights 객체의 점수가 가장 높습니다.

indexOptionsoffsets(기본값)으로 설정하여 강조 표시하려는 필드를 Atlas Search 문자열 유형으로 인덱싱해야 합니다.

Atlas Search highlight 옵션을 EmbeddedDocument 연산자와 함께 사용할 수 없습니다.

Atlas Search Playground 또는 Atlas 클러스터에서 다음 예시를 사용해 볼 수 있습니다.

이 페이지의 예제에서는 다음 문서가 포함된 fruit라는 컬렉션을 사용합니다.

{
"_id" : 1,
"type" : "fruit",
"summary" : "Apple varieties",
"description" : "Apples come in several varieties, including Fuji, Granny Smith, and Honeycrisp. The most popular varieties are McIntosh, Gala, and Granny Smith.",
"category": "organic"
},
{
"_id" : 2,
"type" : "fruit",
"summary" : "Banana",
"description" : "Bananas are usually sold in bunches of five or six.",
"category": "nonorganic"
},
{
"_id" : 3,
"type" : "fruit",
"summary" : "Pear varieties",
"description" : "Bosc and Bartlett are the most common varieties of pears.",
"category": "nonorganic"
}

fruit 컬렉션에는 영어 분석기 및 동적 필드 매핑을 사용하는 인덱스 정의도 있습니다.

{
"analyzer": "lucene.english",
"searchAnalyzer": "lucene.english",
"mappings": {
"dynamic": true
}
}

참고

강조 표시의 한 가지 유용한 측면은 검색어와 정확히 동일하지 않을 수 있는 검색 쿼리에서 반환된 원본 텍스트를 표시한다는 점입니다. 예를 들어 언어별 분석기 를 사용하는 경우 텍스트 검색은 형태소가 있는 모든 를 반환합니다. 검색 용어의 변형입니다.

강조 표시의 또 다른 유용한 측면은 path 쿼리 내부 또는 외부의 모든 필드를 강조 표시하는 데 사용할 수 있다는 점입니다. 예를 들어 용어를 검색할 때 highlight 옵션을 사용하여 지정한 다른 필드와 쿼리 필드에서 쿼리 용어에 대해 강조 표시를 수행할 수 있습니다. 자세한 내용은 다중 필드 예시를 참조하세요.

다음 쿼리는 Atlas Search 쿼리의 $search highlight 옵션을 보여 줍니다.

다음 쿼리는 highlight 옵션이 활성화된 상태에서 fruit 컬렉션의 description 필드에서 varietybunch를 검색합니다.

$project 파이프라인 단계에서는 출력을 description 필드로 제한하고 강조 표시 정보가 포함된 highlights(이)라는 새 필드를 추가합니다.

1db.fruit.aggregate([
2 {
3 $search: {
4 "text": {
5 "path": "description",
6 "query": ["variety", "bunch"]
7 },
8 "highlight": {
9 "path": "description"
10 }
11 }
12 },
13 {
14 $project: {
15 "description": 1,
16 "_id": 0,
17 "highlights": { "$meta": "searchHighlights" }
18 }
19 }
20])

검색어 bunchdescription 필드에 bunches라는 단어가 포함되어 있으므로 _id: 2가 있는 문서에서 일치하는 항목을 반환합니다. 검색어 varietydescription 필드에 varieties라는 단어가 포함되어 있기 때문에 _id: 3_id: 1이 있는 문서에서 일치하는 항목을 반환합니다.

Atlas Search Playground에서 사용해 보세요

다음 쿼리는 highlight 옵션을 활성화하고 검사할 최대 문자 수를 40로 설정하고 높은 점수의 구절을 문서당 1개만 반환하도록 설정한 상태에서fruit 컬렉션의 description 필드에서 varietybunch를 검색합니다.

$project 파이프라인 단계에서는 출력을 description 필드로 제한하고 강조 표시 정보가 포함된 highlights(이)라는 새 필드를 추가합니다.

1db.fruit.aggregate([
2 {
3 $search: {
4 "text": {
5 "path": "description",
6 "query": ["variety", "bunch"]
7 },
8 "highlight": {
9 "path": "description",
10 "maxNumPassages": 1,
11 "maxCharsToExamine": 40
12 }
13 }
14 },
15 {
16 $project: {
17 "description": 1,
18 "_id": 0,
19 "highlights": { "$meta": "searchHighlights" }
20 }
21 }
22])

위 결과의 두 번째 문서에는 검색 필드에 검색어 varieties가 포함되어 있음에도 불구하고 빈 highlights 배열이 포함되어 있는데, 이는 Atlas Search에서 강조 표시를 위해 문자를40개만 검사했기 때문입니다. 마찬가지로, includ 라는 단어가 잘린 이유는 Atlas Search가 검색 필드에서 강조 표시를 위해 문자 40개만 검사했기 때문입니다. 세 번째 문서에는 여러 구절에 검색어가 포함되어 있지만, 쿼리가 highlights 결과에서 문서당 구절이 1 개만 필요하기 때문에 Atlas Search는 highlights 결과에서 하나의 구절만 반환합니다.

Atlas Search Playground에서 사용해 보세요

다음 쿼리는 descriptionsummary 필드 모두에 highlight 옵션이 활성화된 상태에서 fruit 컬렉션의 description 필드에서 varieties을 검색합니다.

$project 파이프라인 단계에서는 highlight 옵션의 모든 필드에서 쿼리 용어에 대한 하이라이트 정보를 포함하는 highlights라는 새 필드를 추가합니다.

1db.fruit.aggregate([
2 {
3 $search: {
4 "text": {
5 "path": "description",
6 "query": "varieties"
7 },
8 "highlight": {
9 "path": ["description", "summary" ]
10 }
11 }
12 },
13 {
14 $project: {
15 "description": 1,
16 "summary": 1,
17 "_id": 0,
18 "highlights": { "$meta": "searchHighlights" }
19 }
20 }
21])

두 문서의 쿼리 필드 description에 쿼리 용어 varieties가 포함되어 있기 때문에 검색어 varieties_id: 1_id: 3이 있는 문서에서 일치하는 항목을 반환합니다. 또한 highlights 배열에는 summary 필드가 포함되는데, 이는 필드에 쿼리 용어 varieties 가 포함되어 있기 때문입니다.

Atlas Search Playground에서 사용해 보세요

다음 쿼리는 des로 시작하는 필드에 대해 highlight 옵션이 활성화된 상태에서 fruit 컬렉션의 des로 시작하는 필드에서 varieties라는 용어를 검색합니다.

$project 파이프라인 단계에서는 강조 표시 정보가 포함된 highlights라는 새 필드를 추가합니다.

1db.fruit.aggregate([
2 {
3 "$search": {
4 "text": {
5 "path": {"wildcard": "des*"},
6 "query": ["variety"]
7 },
8 "highlight": {
9 "path": {"wildcard": "des*"}
10 }
11 }
12 },
13 {
14 "$project": {
15 "description": 1,
16 "_id": 0,
17 "highlights": { "$meta": "searchHighlights" }
18 }
19 }
20])

Atlas Search 결과에서 des로 시작하는 필드가 강조 표시됩니다.

Atlas Search Playground에서 사용해 보세요

다음 쿼리는 category 필드에서 organic 용어를 검색하고 description 필드에서 variety 용어를 검색합니다. $search 복합 쿼리의 highlight 옵션은 description 필드에 대한 텍스트 쿼리의 정보만 강조 표시하도록 요청합니다. $search 단계 내의 highlight 옵션은 $search 단계의 하위 옵션이어야 하며 $search 단계 내의 어떤 연산자에도 속하지 않아야 합니다.

$project 파이프라인 단계에서는 강조 표시 정보가 포함된 highlights라는 새 필드를 추가합니다.

1db.fruit.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [{
6 "text": {
7 "path": "category",
8 "query": "organic"
9 }
10 },
11 {
12 "text": {
13 "path": "description",
14 "query": "variety"
15 }
16 }]
17 },
18 "highlight": {
19 "path": "description"
20 }
21 }
22 },
23 {
24 "$project": {
25 "description": 1,
26 "category": 1,
27 "_id": 0,
28 "highlights": { "$meta": "searchHighlights" }
29 }
30 }
31])

Atlas Search Playground에서 사용해 보세요

이 예의 경우 fruit 컬렉션에는 다음과 같은 인덱스 정의도 있습니다.

{
"mappings": {
"dynamic": false,
"fields": {
"description": [
{
"type": "autocomplete",
"tokenization": "edgeGram",
"minGrams": 2,
"maxGrams": 15,
"foldDiacritics": true
}
]
}
}
}

다음 쿼리는 fruit 컬렉션의 description 필드에서 var 문자를 검색합니다. 이때 description필드에 대해 highlight 옵션을 활성화한 상태에서 문자를 검색합니다.

$project 파이프라인 단계에서는 강조 표시 정보가 포함된 highlights라는 새 필드를 추가합니다.

중요

경로의 자동 완성 인덱싱 버전을 강조 표시하려면 자동 완성 연산자가 쿼리에서 해당 경로를 사용하는 유일한 연산자여야 합니다.

1db.fruit.aggregate([
2 {
3 "$search": {
4 "autocomplete": {
5 "path": "description",
6 "query": ["var"]
7 },
8 "highlight": {
9 "path": "description"
10 }
11 }
12 },
13 {
14 "$project": {
15 "description": 1,
16 "_id": 0,
17 "highlights": { "$meta": "searchHighlights" }
18 }
19 }
20])

fruit 컬렉션 description 필드의 단어 시작 부분에 var 문자가 포함되어 있기 때문에 Atlas Search는 쿼리 문자열 var에 대해 _id: 1id_: 2가 일치하는 문서를 반환합니다. Atlas Search는 강조 표시된 경로가 강조 표시된 쿼리의 자동 완성 연산자에서만 참조되는 경우 강조 표시된 hit를 쿼리 용어에 좀 더 폭넓게 매칭시킵니다.

Atlas Search Playground에서 사용해 보세요

← 2. 쿼리 실행 병렬화