On this page
限制扫描的条目数
本教程描述了如何创建索引以限制为包含$text表达式和相等条件的查询而扫描的索引条目数。
集合inventory
包含以下文档:
{ _id: 1, dept: "tech", description: "lime green computer" }
{ _id: 2, dept: "tech", description: "wireless red mouse" }
{ _id: 3, dept: "kitchen", description: "green placemat" }
{ _id: 4, dept: "kitchen", description: "red peeler" }
{ _id: 5, dept: "food", description: "green apple" }
{ _id: 6, dept: "food", description: "red potato" }
考虑由各个部门执行文本搜索的常见用例,例如:
db.inventory.find( { dept: "kitchen", $text: { $search: "green" } } )
为了将文本搜索限制为仅扫描特定dept
内的那些文档,请创建一个复合索引,首先在字段dept
上指定一个升/降索引键,然后在字段description
上指定text
索引键:
db.inventory.createIndex(
{
dept: 1,
description: "text"
}
)
然后,特定部门内的文本搜索将限制索引文档的扫描。例如,以下查询仅扫描dept
等于kitchen
的那些文档:
db.inventory.find( { dept: "kitchen", $text: { $search: "green" } } )
Note
复合
text
索引不能包含任何其他特殊索引类型,例如multi-key或geospatial索引字段。如果化合物
text
索引在text
索引键之前包含键 ,要执行$text搜索,查询谓词必须在前面的键上包含 相等匹配条件**。创建复合
text
索引时,所有text
索引键必须在索引规范文档中相邻列出。
See also