テキスト検索では、インデックス付きフィールドに検索タームを含む各ドキュメントにスコアが割り当てられます。 スコアによって、特定の検索クエリに対するドキュメントの関連性が決まります。
textインデックスの場合、インデックス付きフィールドの重みは、テキスト検索スコアに関して他のインデックス付きフィールドと比較したフィールドの重要性を示します。
ドキュメント内の各インデックス付きフィールドについて、MongoDB は一致の数に重みを掛けて結果を合計します。 MongoDB はこの合計を使用して、ドキュメントのスコアを計算します。 テキスト スコアによる返却と並べ替えの詳細については、 $meta演算子を参照してください。
インデックス フィールドのデフォルトの重みは 1 です。 インデックス フィールドの重みを調整するには、 db.collection.createIndex()メソッドにweightsオプションを含めます。
警告
インデックスを再作成する必要がないように、重みを慎重に選択してください。
コレクション blogは、次のドキュメントを含みます。
{ _id: 1, content: "This morning I had a cup of coffee.", about: "beverage", keywords: [ "coffee" ] } { _id: 2, content: "Who doesn't like cake?", about: "food", keywords: [ "cake", "food", "dessert" ] }
contentフィールドとkeywordsフィールドで異なるフィールドの重みを持つtextインデックスを作成するには、 createIndex()メソッドにweightsオプションを含めます。 たとえば、次のコマンドは 3 つのフィールドにインデックスを作成し、のうち 2 つのフィールドに重みを割り当てます。
db.blog.createIndex( { content: "text", keywords: "text", about: "text" }, { weights: { content: 10, keywords: 5 }, name: "TextIndex" } )
textインデックスには次のフィールドと重みがあります。
contentの重みは10で、keywordsの重みは5で、aboutのデフォルトの重みは 1 です。
これらの重みは、インデックス フィールドの相互に対する相対的な重要性を示します。 たとえば、 contentフィールドでのターム一致には次のようになります。
2回(つまり10:5)は、keywordsフィールドのターム一致としての影響と10回(つまり10:1)は、aboutフィールドのターム一致としての影響を与えます。
注意
MongoDB Atlas でホストされているデータの場合、 Atlas Searchはtextインデックスよりも堅牢なカスタム スコアリングを提供します。 詳しくは、「 Atlas Searchスコアリング」のドキュメントを参照してください。