mongodb - 如何在mongodb中实现部分文本匹配的相关搜索

标签 mongodb search aggregate regexp-like

假设我的 mongodb 集合中有一个名为 products 的产品列表,测试数据如下

Samsung Mobile Phone

Samsung Fridge

Samsung Washing Machiene

我可以使用以下 mongo 聚合查询来激活相关搜索

db.products.aggregate(
    [{
        "$match": {
            "$and": [{
                "status": "active"
            }, {
                "delete": false
            },  { 
                "$text": { $search: "Samsung Mobile" } 
            }]
        }
    },
    { $sort: { score: { $meta: "textScore" } } }
    ]
);

问题是我无法使用部分关键字获得结果,例如“Samsun”。这将为我提供空结果,下面给出带有空结果的完整聚合查询

db.products.aggregate(
    [{
        "$match": {
            "$and": [{
                "status": "active"
            }, {
                "delete": false
            },  { 
                "$text": { $search: "Samsun" } 
            }]
        }
    },
    { $sort: { score: { $meta: "textScore" } } }
    ]
);

最佳答案

考虑到产品名称最多只有几个单词,使用 $text 搜索产品名称之类的内容有点过分了。在 mongodb 中 $text 最适合产品描述或规范等内容,以便您的用户可以搜索可能出现在有关产品或评论等的短段落中的关键字。对于产品名称等内容,我将重新开始一个简单的$regex寻找部分匹配,尽管事实上您不会获得像这样的 textScore 值:

db.products.aggregate([
  {
    "$match": {
      "status": "active",
      "delete": false,
      "name": {
        $regex: "Samsun",
        $options: "i"
      }
    }
  }
])

或者,如果您不打算进行进一步的aggregate阶段,那么一个简单的find将完​​成这样的工作:

db.products.find({
  "status": "active",
  "delete": false,
  "name": {
    $regex: "Samsun",
    $options: "i"
  }
})

如果您使用 Atlas,则可以使用 通配符自动完成 进行部分匹配。 优秀How to Run Partial Match Atlas Search Queries资源有一些 Node 代码示例,可以很好地解释它,但需要一些预配置。

关于mongodb - 如何在mongodb中实现部分文本匹配的相关搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77599962/

相关文章:

java - 是否有适用于 MongoDB 的 DbUnit 替代方案?

node.js - 使用 Passport js 进行身份验证时,用户为空

sqlite - 在字符串中的任意位置使用 LIKE 进行搜索

r - 聚合函数在数据框中创建不需要的向量

python - SpecificationError : nested renamer is not supported while agg() along with groupby()的解决方案

sql - PostgreSQL - 按数组排序

mongodb - 数据库条目的高效唯一 key 生成

node.js - Sails.js 与 Mongo 无法通过 _id 找到

SQL函数来计算字符串在列中出现的次数?

android - google-play-store 可见性算法或想法有问题