Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

自己管理型配置のテキスト検索結果への重みの割り当て

項目一覧

  • このタスクについて
  • 始める前に
  • 手順
  • 結果
  • contentabout フィールドの一致
  • フィールドと フィールドの一致keywordsabout
  • 1 つのドキュメントでの複数の一致
  • 詳細

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コレクション内のドキュメントで string 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
}
]

検索string ice cream は次と一致します。

  • _id: 2を持つドキュメントのcontentフィールド。

  • _id: 3を持つドキュメントのaboutフィールド。

contentフィールドのターム一致は、 keywordsフィールドのターム一致として、 10倍の影響( 10:1重み)を持ちます。

次のクエリは、 blogコレクション内のドキュメントで string 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
}
]

検索string food は次と一致します。

  • _id: 3を持つドキュメントのkeywordsフィールド。

  • _id: 2を持つドキュメントのaboutフィールド。

keywordsフィールドのターム一致は、 aboutフィールドのターム一致として、 5倍の影響( 5:1重み)を持ちます。

次のクエリは、 blogコレクション内のドキュメントで string 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
}
]

検索string coffee は次と一致します。

  • _id: 1を持つドキュメント内のcontentフィールドとkeywordsフィールド。

  • _id: 3を持つドキュメントのcontentフィールド。

検索stringが複数のフィールドと一致するときに score を計算するために、 MongoDBは一致の数に対応するフィールドの重みを掛けて結果を合計します。

MongoDB でのテキスト検索の詳細については、以下を参照してください。

注意

Atlas Search

MongoDB Atlas でホストされているデータの場合、 Atlas Searchtextインデックスよりも堅牢なカスタム スコアリングを提供します。 詳しくは、「 Atlas Searchスコアリング」のドキュメントを参照してください。

戻る

フィールドの使用