Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

자체 관리 배포서버에서 텍스트 검색 결과에 가중치 할당

이 페이지의 내용

  • 이 작업에 대하여
  • 시작하기 전에
  • 절차
  • 결과
  • contentabout 필드의 일치
  • keywordsabout 필드의 일치
  • 단일 문서에서 여러 개의 일치 항목
  • 자세히 알아보기

MongoDB는 텍스트 검색 결과를 반환할 때 반환된 각 문서에 점수를 할당합니다. 점수는 주어진 검색 쿼리에 대한 문서의 관련성을 나타냅니다. 반환된 문서를 점수별로 정렬하여 가장 관련성이 높은 문서가 결과 집합에 먼저 나타나도록 할 수 있습니다.

여러 텍스트 인덱스 키가 있는 복합 인덱스 가 있는 경우 인덱스된 각 필드 에 대해 서로 다른 가중치 를 지정할 수 있습니다. 인덱싱된 필드 의 가중치는 인덱싱된 다른 필드에 비해 해당 필드 의 중요성을 나타내며, 가중치가 높을수록 텍스트 검색 점수가 높아집니다.

예를 들어 사용자가 제목을 검색할 가능성이 높거나 title 에 다른 문서 필드에 비해 관련 검색어가 더 많이 포함되어 있는 경우 title 필드에서 검색 일치 항목을 강조 표시할 수 있습니다.

인덱싱된 필드의 기본 가중치는 1입니다. 인덱싱된 필드의 가중치를 조정하려면 이 예에서 보는 것처럼 db.collection.createIndex() 메서드에 가중치 옵션을 포함합니다:

db.<collection>.createIndex(
{
<field1>: "text",
<field2>: "text",
...
},
{
weights: {
<field1>: <weight>,
<field2>: <weight>,
...
},
name: <indexName>
}
)

중요

인덱스를 생성한 후 인덱스의 가중치를 변경하면 MongoDB에서 컬렉션을 다시 인덱싱해야 합니다. 재인덱스 작업은 특히 대규모 컬렉션의 경우 성능에 부정적인 영향을 미칠 수 있습니다. 자세한 내용은 채워진 컬렉션의 인덱스 빌드를참조하세요.

개별 블로그 게시물에 대한 문서가 포함된 blog 컬렉션이 있습니다. 각 문서에는 다음이 포함됩니다:

  • 게시물의 콘텐츠입니다.

  • 게시물이 다루는 주제입니다.

  • 글과 관련된 키워드 목록입니다.

사용자가 블로그 게시물에서 텍스트 검색을 수행할 수 있도록 텍스트 인덱스를 생성하려고 합니다. 애플리케이션에서 콘텐츠, 주제, 키워드에 대한 검색을 지원합니다.

다른 문서 필드보다 content 필드의 일치 항목에 우선순위를 두려고 합니다. 인덱스 가중치를 사용하여 content 의 일치 항목에 더 큰 중요성을 부여하고 쿼리 결과를 정렬하여 content 개의 일치 항목이 먼저 표시되도록 합니다.

다음 문서로 blog 컬렉션을 생성합니다.

db.blog.insertMany( [
{
_id: 1,
content: "This morning I had a cup of coffee.",
about: "beverage",
keywords: [ "coffee" ]
},
{
_id: 2,
content: "Who likes chocolate ice cream for dessert?",
about: "food",
keywords: [ "poll" ]
},
{
_id: 3,
content: "My favorite flavors are strawberry and coffee",
about: "ice cream",
keywords: [ "food", "dessert" ]
}
] )

인덱싱된 각 필드에 대해 서로 다른 가중치를 사용하여 text 인덱스를 만듭니다:

db.blog.createIndex(
{
content: "text",
keywords: "text",
about: "text"
},
{
weights: {
content: 10,
keywords: 5
},
name: "BlogTextIndex"
}
)

text 인덱스에는 다음과 같은 필드와 가중치가 있습니다.

  • content 가중치는 10입니다.

  • keywords 가중치는 5입니다.

  • about 기본 가중치는 1입니다.

이러한 가중치는 인덱싱된 필드 간의 상대적 중요성을 나타냅니다.

다음 예시에서는 인덱싱된 필드에 대한 다양한 가중치가 결과 점수에 어떤 영향을 미치는지 보여 줍니다. 각 예는 각 문서의 textScore 을 기준으로 결과를 정렬합니다. 문서의 textScore 속성에 액세스하려면 $meta 연산자를 사용합니다.

다음 쿼리는 blog 컬렉션에서 문자열 ice cream에 대한 문서를 검색합니다:

db.blog.find(
{
$text: { $search: "ice cream" }
},
{
score: { $meta: "textScore" }
}
).sort( { score: { $meta: "textScore" } } )

출력:

[
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'food', 'poll' ],
score: 12
},
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ],
score: 1.5
}
]

검색 문자열 ice cream 이 일치합니다:

  • 문서에서 _id: 2이 있는 content 필드입니다.

  • 문서에서 _id: 3이 있는 about 필드입니다.

content 필드의 용어 일치는 keywords 필드의 용어 일치보다 10배의 영향(10:1 가중치)을 갖습니다.

다음 쿼리는 blog 컬렉션에서 문자열 food에 대한 문서를 검색합니다:

db.blog.find(
{
$text: { $search: "food" }
},
{
score: { $meta: "textScore" }
}
).sort( { score: { $meta: "textScore" } } )

출력:

[
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ],
score: 5.5
},
{
_id: 2,
content: "Who likes chocolate ice cream for dessert?",
about: 'food',
keywords: [ 'poll' ],
score: 1.1
}
]

검색 문자열 food 이 일치합니다:

  • 문서에서 _id: 3이 있는 keywords 필드입니다.

  • 문서에서 _id: 2이 있는 about 필드입니다.

keywords 필드의 용어 일치는 about 필드의 용어 일치보다 5배의 영향(5:1 가중치)을 갖습니다.

다음 쿼리는 blog 컬렉션에서 문자열 coffee에 대한 문서를 검색합니다:

db.blog.find(
{
$text: { $search: "coffee" }
},
{
score: { $meta: "textScore" }
}
).sort( { score: { $meta: "textScore" } } )

출력:

[
{
_id: 1,
content: 'This morning I had a cup of coffee.',
about: 'beverage',
keywords: [ 'coffee' ],
score: 11.666666666666666
},
{
_id: 3,
content: 'My favorite cake flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ],
score: 6
}
]

검색 문자열 coffee 이 일치합니다:

  • _id: 1 contentkeywords 필드가 있는 문서의 필드입니다.

  • 문서에서 _id: 3이 있는 content 필드입니다.

검색 문자열이 여러 필드와 일치하는 경우 score 를 계산하기 위해 MongoDB는 일치 항목 수에 해당 필드의 가중치를 곱하고 결과를 합산합니다.

MongoDB의 텍스트 검색에 대해 자세히 알아보려면 다음을 참조하세요.

참고

Atlas Search

MongoDB Atlas 에서 호스팅되는 데이터의 경우, Atlas Searchtext 인덱스보다 더 강력한 사용자 지정 점수를 제공합니다. 학습 보려면 Atlas Search 점수( Scoring ) 문서를 참조하세요.

돌아가기

필드 사용