MongoDB 中文本搜索的分隔符

Kru*_*ngi 5 search text mongodb

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

db.collection.find({"$text" : {"$search" : "a@b"}})  
Run Code Online (Sandbox Code Playgroud)

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

db.collection.find({"$text" : {"$search" : "a b"}}) 
Run Code Online (Sandbox Code Playgroud)

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

chr*_*dam 2

匹配短语(而不是单个术语),请将短语括在转义双引号中(\"),如下所示:

"\"a@b\""
Run Code Online (Sandbox Code Playgroud)

所以你的查询看起来像:

db.collection.find({"$text" : {"$search" : "\"a@b\""}})
Run Code Online (Sandbox Code Playgroud)

例如:

db.collection.insert([
    {"x": "a@b"},
    {"x": "a b"},
    {"x": "b"},
    {"x": "a"}
]);

db.collection.createIndex({ x: "text"});
Run Code Online (Sandbox Code Playgroud)

查询db.collection.find({"$text" : {"$search" : "\"a@b\""}})返回

/* 0 */
{
    "_id" : ObjectId("5549ddce180e849972939043"),
    "x" : "a@b"
}
Run Code Online (Sandbox Code Playgroud)

  • @chridam 将其作为您提到的短语搜索将起作用。但这个解决方案需要将每个查询作为一个短语,这意味着即使我想搜索“a b”,我最终也会搜索“ab”。我正在寻找一个通用的解决方案,我应该能够指定分隔符集,这样它就不会在指定分隔符集之外的特殊字符上进行分割。假设我将分隔符指定为“-”,那么如果查询是“ab”,mongo 应该将其解析为“a b”。如果查询是“a@b”,则应保留为“a@b”。现在甚至“a@b”也被解析为“a b” (5认同)