Docs Menu
Docs Home
/ /

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

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의 텍스트 검색에 대해 자세히 알아보려면 다음을 참조하세요.

참고

MongoDB Search

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

돌아가기

모든 필드를 사용하여 텍스트 인덱스 언어 지정

이 페이지의 내용