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

自己管理型配置でスキャンされたテキストインデックスのエントリ数の制限

項目一覧

  • このタスクについて
  • 手順
  • 結果
  • 検査されたドキュメント数の表示
  • 詳細

大規模なデータセットでテキスト検索クエリを実行すると、単一フィールドのテキスト インデックスが多数のエントリをスキャンして結果を返す可能性があり、クエリが遅くなる可能性があります。

クエリのパフォーマンスを向上させるには、 複合テキスト インデックスを作成し、テキスト検索クエリに等価一致を含めることができます。 複合インデックス に等価一致で使用される フィールドが含まれている場合、インデックスはスキャンするエントリが少なくなり、結果がより速く返されます。

この例では、店舗マネージャーは、次のドキュメントを含む inventoryコレクションをクエリします。

db.inventory.insertMany( [
{ _id: 1, department: "tech", description: "lime green computer" },
{ _id: 2, department: "tech", description: "wireless red mouse" },
{ _id: 3, department: "kitchen", description: "green placemat" },
{ _id: 4, department: "kitchen", description: "red peeler" },
{ _id: 5, department: "food", description: "green apple" },
{ _id: 6, department: "food", description: "red potato" }
] )

マネージャーは、特定の部門内のアイテムのテキスト検索クエリを実行します。

フィールドと フィールドに複合テキスト インデックスを設定すると、スキャンされるインデックスdepartmentdescription キーが指定されたdepartment 内のドキュメントのみに制限されます。複合テキスト インデックスは、 descriptionフィールドの単一フィールド テキスト インデックスと比較してパフォーマンスが向上します。

次のフィールドを含む複合インデックスをinventoryコレクションに作成します。

  • departmentフィールドの昇順または降順のインデックス キー

  • descriptionフィールドのtextインデックス キー

db.inventory.createIndex(
{
department: 1,
description: "text"
}
)

複合インデックスの作成後、テキスト検索クエリは、 departmentフィールドの指定された等価条件に一致するドキュメントのみをスキャンします。

たとえば、次のクエリは、 departmentkitchenに等しく、 descriptionフィールドに string greenが含まれるドキュメントをスキャンします。

db.inventory.find( { department: "kitchen", $text: { $search: "green" } } )

出力:

[ { _id: 3, department: 'kitchen', description: 'green placemat' } ]

クエリを返すまでにスキャンされたドキュメント数を確認するには、クエリのexecutionStatsを表示します。

db.inventory.find(
{
department: "kitchen", $text: { $search: "green" }
}
).explain("executionStats")

検査されたインデックスキーの数はtotalKeysExaminedフィールドに表示されます。 より多くのインデックス キーを調べるクエリは、通常完了までの時間がかかります。

departmentdescriptionの複合インデックスでは、クエリは1 つのインデックスキーのみを検索します。 コレクションには、 departmentkitchenで、 descriptionに string greenが含まれているドキュメントが 1 つだけあります。

ただし、クエリがdescriptionフィールドのみで単一フィールド テキスト インデックスを使用する場合、クエリは3 つのインデックス キーを検索します。 コレクションには 3 つのドキュメントがあり、 descriptionフィールドに string greenが含まれています。

前の例で使用されているような小規模なコレクションでは、単一フィールド インデックスと複合テキスト インデックスのパフォーマンスに大きな違いはありません。 ただし、大規模なコレクションでは、インデックス エントリスキャンが増加するとパフォーマンスが著しく低下する可能性があります。 最高のパフォーマンスを得るには、等価一致に最適化するためにスキャンされたインデックスエントリ数を制限したテキストインデックスを作成します。

戻る

重みの割り当て