我有一个多键索引,我只需要在其中一个索引中进行文本搜索。有可能吗?
答案 0 :(得分:0)
如果您在2个字段上创建复合索引,请执行以下操作:
db.myCollection.ensureIndex({"field1":1,"field2":1})
您的索引将在两种情况下使用:
db.myCollection.find({"field1":"foo"})
和
db.myCollection.find({"field1":"foo","field2":"foo2"})
使用复合索引,仅使用定义的索引的第一个字段。如果你搜索它。
要检查您的索引是否已被使用,请在您的请求之后添加.explain(),如下所示:
db.myCollection.find({"field1":"foo"}).explain()
db.myCollection.find({"field1":"foo","field2":"foo2"}).explain()
你会得到像这样的json响应:
{
"cursor" : "BtreeCursor field1_1_field2_1",
...
}
但如果您只在第二个字段上进行搜索,请执行以下操作:
db.myCollection.find({"field2":"foo"}).explain()
你会得到像这样的json响应:
{
"cursor" : "BasicCursor"
}
这意味着查询没有使用您的索引
所以,是的,你可以,但前提是查询是在复合索引中定义的第一个字段上
cordialy