Mongodb 2.6+ 内置了对使用 $text 运算符的文本搜索的支持。以下是它的使用方法。
-
在所需的可搜索字段上建立文本索引。注意:对于 MongoDB 2.6,一个集合只能有 1 个文本索引。
在一个字段上创建文本索引
db.test.ensureIndex({
"field1" : "text"
}, { name : "Field1TextIndex"});
在两个字段上创建文本索引
db.test.ensureIndex({
"field1" : "text",
"field2" : "text"
}, { name : "Field12TextIndex"});
为任何字符串字段创建文本索引
db.test.ensureIndex({
"$**" : "text"
}, { name : "AllTextIndex"});
-
使用 $text 运算符查询集合。
这是$text的格式
{ $text: { $search: <string of keywords>, $language: <string> } }
示例代码
设置
use test;
var createPerson = function(f,l,d){
return { firstName : f, lastName: l, description : d};
};
db.test.remove({});
db.test.insert(createPerson("Ben", "Dover", "Real Estate Agent"));
db.test.insert(createPerson("James", "Bond", "secret agent, ben's friend"));
为文档中的所有字符串字段创建文本索引。
db.test.ensureIndex({ "$**" : "text" }, { name : "AllTextIndex"});
查询所有字段的关键字
正在搜索ben
db.test.find({
$text : {
$search : "ben"
}
});
输出
{ "_id" : "...", "firstName" : "James", "lastName" : "Bond", "description" : "secret agent, ben's friend" }
{ "_id" : "...", "firstName" : "Ben", "lastName" : "Dover", "description" : "Real Estate Agent" }
搜索“ben”会返回两个文档,因为其中一个具有 Ben 作为 firstName,而另一个在 description 字段中具有 ben's。
查询real friend 会产生相同的结果。
db.test.find({
$text : {
$search : "real friend"
}
});
更多信息在这里: