Docs Menu

phrase

phrase연산자는 인덱스 구성에 지정된 분석기를 사용하여 정렬된 용어 순서가 포함된 문서 검색을 수행합니다. 분석기를 지정하지 않으면 기본 표준 분석기가 사용됩니다.

phrase 의 구문은 다음과 같습니다.

1{
2 $search: {
3 "index": <index name>, // optional, defaults to "default"
4 "phrase": {
5 "query": "<search-string>",
6 "path": "<field-to-search>",
7 "score": <options>,
8 "slop": <distance-number>,
9 "synonyms": "<synonyms-mapping-name>"
10 }
11 }
12}

phrase은(는) 다음 텀은 사용하여 쿼리를 구성합니다.

필드
유형
설명
필요성

query

문자열 또는 문자열 배열

검색할 문자열 또는 문자열을 입력합니다.

path

문자열 또는 문자열 배열

검색 할 인덱싱된 필드 입니다. 검색 할 와일드카드 경로를 지정할 수도 있습니다. 자세한 학습 은 쿼리 경로 구성을 참조하세요.

핵심: 연산자 사용하려면 속성 또는 기본값 인(으)로 설정하다 에서 phrase 쿼리 필드 유형으로 인덱스 해야 stringindexOptionspositionsoffsets합니다. 자세한 학습 문자열 필드 속성 구성을 참조하세요.

slop

integer

query 구문에서 단어 간 허용 거리입니다. 값이 낮을수록 단어 사이의 위치 거리가 짧아지고 값이 클수록 단어를 더 많이 재구성하고 단어 사이의 거리를 늘려 쿼리를 충족할 수 있습니다. 기본값은 0 입니다. 즉, 일치하는 단어로 간주되려면 단어가 쿼리와 정확히 같은 위치에 있어야 합니다. 정확히 일치하는 항목이 더 높은 점수를 받습니다.

no

score

객체

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

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

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

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

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

기본 점수를 수정하는 옵션에 대한 자세한 내용은 결과에서 문서 점수 매기기를 참조하세요.

no

synonyms

문자열

동의어를 사용하여 쿼리를 실행하는 데 필요합니다.

인덱스 정의에 있는 동의어 매핑 정의의 이름입니다. 값은 빈 문자열일 수 없습니다.

Atlas Search에서 동의어 매핑을 사용하는 쿼리를 실행하는 데 걸리는 시간은 동의어 소스 컬렉션에 있는 문서의 수와 크기에 따라 달라집니다.

예를 들어 매우 적은 수의 동의어 문서를 기반으로 한 동의어 매핑을 사용하는 쿼리는 많은 동의어 문서를 기반으로 한 동의어 매핑을 사용하는 쿼리보다 더 빠를 수 있습니다.

옵션

이 페이지의 예시에서는 sample_mflix 데이터베이스의 movies 컬렉션을 사용합니다. 샘플 데이터세트를 클러스터에 로드한 후 동적 매핑을 사용하여 Atlas Search 인덱스를 생성하고 클러스터에서 예시 쿼리를 실행합니다. 동의어 예제를 시도하려면 sample_mflix 데이터베이스에 synonymous_terms 컬렉션을 추가한 다음 synonyms 매핑 컬렉션으로 인덱스를 정의 해야 합니다.

다음 Atlas Search 예시에서는 title 필드에서 쿼리 문자열 new york에 대한 기본 검색을 수행합니다. 쿼리에 slop이 없으므로 slop 값의 기본값은 0이며, 이는 단어의 위치가 쿼리 문자열과 정확히 일치해야 결과에 포함될 수 있음을 의미합니다. 쿼리에는 다음도 포함됩니다.

  • $limit 단계는 출력을 10 결과로만 제한합니다.

  • title을 제외한 모든 필드를 제외하고 score라는 필드를 추가하려면 $project 단계를 수행합니다.

예시

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": "new york"
7 }
8 }
9 },
10 { $limit: 10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])
1[
2 { title: 'New York, New York', score: 6.786321640014648 }
3 { title: 'New York', score: 6.258549213409424 }
4 { title: 'New York Stories', score: 5.3813982009887695 }
5 { title: 'New York Minute', score: 5.3813982009887695 }
6 { title: 'Synecdoche, New York', score: 5.3813982009887695 }
7 { title: 'New York Doll', score: 5.3813982009887695 }
8 { title: 'Little New York', score: 5.3813982009887695 }
9 { title: 'Escape from New York', score: 4.719893455505371 }
10 { title: 'Naked in New York', score: 4.719893455505371 }
11 { title: 'Autumn in New York', score: 4.719893455505371 }
12]

다음 Atlas Search 예시에서는 title 필드에서 쿼리 문자열 the manthe moon에 대한 기본 검색을 수행합니다. 쿼리에 slop이 없으므로 slop 값의 기본값은 0이며, 이는 단어의 위치가 쿼리 문자열과 정확히 일치해야 결과에 포함될 수 있음을 의미합니다. 쿼리에는 다음도 포함됩니다.

예시

  • 출력을 10개의 결과로 제한하기 위한 $limit 단계.

  • title을 제외한 모든 필드를 제외하고 score라는 필드를 추가하려면 $project 단계를 수행합니다.

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": ["the man", "the moon"]
7 }
8 }
9 },
10 { $limit: 10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])
1[
2 { title: 'The Man in the Moon', score: 4.4830474853515625 },
3 { title: 'Shoot the Moon', score: 3.252699851989746 },
4 { title: 'Kick the Moon', score: 3.252699851989746 },
5 { title: 'The Man', score: 2.8923356533050537 },
6 { title: 'The Moon and Sixpence', score: 2.8528637886047363 },
7 { title: 'The Moon Is Blue', score: 2.8528637886047363 },
8 { title: 'Racing with the Moon', score: 2.8528637886047363 },
9 { title: 'Mountains of the Moon', score: 2.8528637886047363 },
10 { title: 'Man on the Moon', score: 2.8528637886047363 },
11 { title: 'Castaway on the Moon', score: 2.8528637886047363 }
12]

다음 Atlas Search 예시에서는 title 필드에서 쿼리 문자열 men women에 대한 기본 검색을 수행합니다. query5slop 값은 단어 menwomen 사이의 이동과 거리를 더 크게 허용합니다. 쿼리에는 $project 단계가 포함되어 있습니다.

  • title을(를) 제외한 모든 필드를 제외합니다.

  • score이라는 필드 추가

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": "men women",
7 "slop": 5
8 }
9 }
10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])
1[
2 { title: 'Men Without Women', score: 3.367523193359375 },
3 { title: 'Men Vs Women', score: 3.367523193359375 },
4 { title: 'Good Men, Good Women', score: 2.8529787063598633 },
5 { title: 'The War Between Men and Women', score: 2.1851978302001953 },
6 { title: 'Women Without Men', score: 1.9656763076782227 },
7 { title: 'Women Vs Men', score: 1.9656763076782227 }
8]

다음 쿼리는 movies 컬렉션의 plot 필드에서 지정된 쿼리 문자열의 용어를 검색합니다. Atlas Search는 sample_mflix.movies 컬렉션에 대한 인덱스의 동의어 매핑 정의에 지정된 동의어 소스 컬렉션 synonymous_terms매핑 유형에 따라 결과를 반환합니다.

다음 쿼리는 plot 필드에서 용어 사이의 거리가 최대 5 이내인 automobile race 구문을 검색합니다.

db.movies.aggregate([
{
$search: {
"phrase": {
"path": "plot",
"query": "automobile race",
"slop": 5,
"synonyms": "my_synonyms"
}
}
},
{
"$limit": 5
},
{
$project: {
"_id": 0,
"plot": 1,
"title": 1,
score: { $meta: "searchScore" }
}
}
])
[
{
plot: 'When a popular daredevil proposes an automobile race across three continents, his arch rival vows to beat him, while an ambitious female reporter has her own plans for victory.',
title: 'The Great Race',
score: 29.569732666015625
},
{
plot: 'A wide variety of eccentric competitors participate in a wild and illegal cross-country car race.',
title: 'The Cannonball Run',
score: 25.50379180908203
},
{
plot: 'A mechanic takes his family to a car race and a series of events occur which brings problems, betrayals, violence and the unexpected death of an elderly person.',
title: 'National Mechanics',
score: 21.538257598876953
},
{
plot: "It's time for the annual London to Brighton antique car rally, and Alan McKim and Ambrose Claverhouse are not going to let their friendship stop them from trying to humiliate each other. ...",
title: 'Genevieve',
score: 20.19266128540039
},
{
plot: "A naive drifter runs away from his army father in hopes of making it on the car racing circuit. In Las Vegas, he meets a young scam artist, who develops a crush on him. He is then ...",
title: 'Speedway Junky',
score: 18.639965057373047
}
]

결과의 문서들은 plot 필드에 다음 텀을 포함하고 있으며, 텀 간의 거리는 최대 5까지 허용됩니다.

  • synonymous_terms 컬렉션에서 equivalent 동의어로 정의되는 automobile, car 또는 vehicle

  • sy``synonymous_terms`` 컬렉션에서 explicit 동의어로 정의되는 race, contest 또는 rally

Atlas Search는 car race 또는 vehicle race 검색에 대해 유사한 결과를 반환합니다. 이는 automobile, car, vehicleequivalent 동의어로 구성했기 때문입니다. 그러나 automobile contest 에 대한 결과에는 race 또는 rally가 있는 문서가 포함되지 않으며, automobile rally에 대한 결과에는race 또는 contest가 있는 문서가 포함되지 않습니다. 이는 contest 또는 rally를 용어의 동의어로 구성하지 않았기 때문입니다.