문서 메뉴

문서 홈MongoDB 실행 및 관리MongoDB Atlas

이 페이지의 내용

  • 정의
  • 구문
  • 옵션
  • 예제
  • 단일 문구 예
  • 여러 구문 예제
  • Slop 예시
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 }
10 }
11}

phrase 는 다음 용어를 사용하여 쿼리를 구성합니다:

필드
유형
설명
필요성
query
문자열 또는 문자열 배열
검색할 문자열 또는 문자열을 입력합니다.
path
문자열 또는 문자열 배열
인덱싱된 필드 또는 검색할 필드. 검색할 와일드카드 경로를 지정할 수도 있습니다. 경로 구성을 참조하세요.
slop
integer
query 구문에서 단어 간 허용 거리입니다. 값이 낮을수록 단어 사이의 위치 거리가 짧아지고 값이 클수록 단어를 더 많이 재구성하고 단어 사이의 거리를 늘려 쿼리를 충족할 수 있습니다. 기본값은 0 입니다. 즉, 일치하는 단어로 간주되려면 단어가 쿼리와 정확히 같은 위치에 있어야 합니다. 정확히 일치하는 항목이 더 높은 점수를 받습니다.
아니
score
객체

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

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

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

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

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

참고

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

아니

다음 예제에서는 sample_mflix 데이터베이스의 movies 컬렉션을 사용합니다. 클러스터에 샘플 데이터 세트가 있는 경우 title 필드에 인덱스를 생성하고 클러스터에서 예제 쿼리를 실행할 수 있습니다.

샘플 데이터 집합을 이미 로드한 경우, Atlas Search 시작하기 자습서에 따라 인덱스 정의를 만들고 Atlas Search 쿼리를 실행하세요.

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

  • $limit 출력을 결과 10개로 제한하는 [$limit] 단계

  • $project 단계에서 title 를 제외한 모든 필드를 제외하고 score 라는 필드를 추가합니다.

예제

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{ "title" : "New York, New York", "score" : 6.75715970993042 }
2{ "title" : "New York", "score" : 6.231321334838867 }
3{ "title" : "New York Stories", "score" : 5.358973026275635 }
4{ "title" : "New York Minute", "score" : 5.358973026275635 }
5{ "title" : "Synecdoche, New York", "score" : 5.358973026275635 }
6{ "title" : "New York Doll", "score" : 5.358973026275635 }
7{ "title" : "Little New York", "score" : 5.358973026275635 }
8{ "title" : "Escape from New York", "score" : 4.700878143310547 }
9{ "title" : "King of New York", "score" : 4.700878143310547 }
10{ "title" : "Naked in New York", "score" : 4.700878143310547 }

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

예제

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

  • $project 단계에서 title 를 제외한 모든 필드를 제외하고 score 라는 필드를 추가합니다.

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{ "title" : "The Man in the Moon", "score" : 4.500046730041504 }
2{ "title" : "Shoot the Moon", "score" : 3.278003215789795 }
3{ "title" : "Kick the Moon", "score" : 3.278003215789795 }
4{ "title" : "The Man", "score" : 2.8860299587249756 }
5{ "title" : "The Moon and Sixpence", "score" : 2.8754563331604004 }
6{ "title" : "The Moon Is Blue", "score" : 2.8754563331604004 }
7{ "title" : "Racing with the Moon", "score" : 2.8754563331604004 }
8{ "title" : "Mountains of the Moon", "score" : 2.8754563331604004 }
9{ "title" : "Man on the Moon", "score" : 2.8754563331604004 }
10{ "title" : "Castaway on the Moon", "score" : 2.8754563331604004 }

다음 Atlas Search 예시에서는 title 필드에서 쿼리 문자열 men women 을 검색합니다. slop 에서 5query 값은 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])

위의 쿼리는 다음과 같은 결과를 반환합니다:

{ "title" : "Men Without Women", "score" : 3.39743709564209 }
{ "title" : "Men Vs Women", "score" : 3.39743709564209 }
{ "title" : "Good Men, Good Women", "score" : 2.878715753555298 }
{ "title" : "The War Between Men and Women", "score" : 2.205303192138672 }
{ "title" : "Women Without Men", "score" : 1.983487844467163 }
{ "title" : "Women Vs Men", "score" : 1.983487844467163 }
← 가깝다