MongoDB中用于文本搜索的分隔符

时间:2015-05-06 09:17:59

标签: mongodb search text

我在mongoDB服务器版本2.6.3中尝试mongoDB文本搜索。当我使用以下查询执行文本搜索时

db.collection.find({"$text" : {"$search" : "a@b"}})  

我得到的结果文件包含a或b,这意味着我得到

的结果
db.collection.find({"$text" : {"$search" : "a b"}}) 

我猜mongo文本解析器正在将'@'字符视为分隔符并将其替换为空格。有没有办法可以指定'@'字符不应被视为分隔符?

1 个答案:

答案 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"
}