我在mongoDB服务器版本2.6.3中尝试mongoDB文本搜索。当我使用以下查询执行文本搜索时
db.collection.find({"$text" : {"$search" : "a@b"}})
我得到的结果文件包含a或b,这意味着我得到
的结果db.collection.find({"$text" : {"$search" : "a b"}})
我猜mongo文本解析器正在将'@'
字符视为分隔符并将其替换为空格。有没有办法可以指定'@'
字符不应被视为分隔符?
答案 0 :(得分:1)
要 match on a phrase ,而不是单个字词,请将该短语括在转义双引号(\")
中,如下所示:
"\"a@b\""
所以你的查询看起来像是:
db.collection.find({"$text" : {"$search" : "\"a@b\""}})
例如:
db.collection.insert([
{"x": "a@b"},
{"x": "a b"},
{"x": "b"},
{"x": "a"}
]);
db.collection.createIndex({ x: "text"});
查询db.collection.find({"$text" : {"$search" : "\"a@b\""}})
返回
/* 0 */
{
"_id" : ObjectId("5549ddce180e849972939043"),
"x" : "a@b"
}