MongoDB $text 搜索仅包含否定项

标签 mongodb full-text-search

怎么能 $text query operator用于查找不包含禁用词列表的文档?这些文件不需要包含任何具体内容;只是没有这些词。

这是一个非常常见的用例,例如用于过滤脏话,但是the MongoDB documentation声明,没有任何解释或解决方法,

When passed a search string that only contains negated words, text search will not match any documents.

最佳答案

如果 MongoDB 不支持这个功能,我想所有的解决方案都会被破解。

这是我的:

我会为我的集合创建一个具有相同静态值的虚拟字段,例如 "dummy":"x"。并将该字段添加到文本索引中。最后将此虚拟值 x 添加到查询中以克服以下限制:

When passed a search string that only contains negated words, text search will not match any documents

db.articles.insert(
    [
        { _id: 1, subject: "coffee", dummy: "x" },
        { _id: 2, subject: "Coffee Shopping", dummy: "x" },
        { _id: 3, subject: "Baking a cake", dummy: "x" },
        { _id: 4, subject: "baking", dummy: "x" },
        { _id: 5, subject: "Cafe Con Cake", dummy: "x" },
        { _id: 6, subject: "ice cream", dummy: "x" },
        { _id: 7, subject: "coffee and cream", dummy: "x" }
    ]
)

我们正在向文本索引添加虚拟字段。

db.articles.createIndex( { subject: "text", dummy:"text" } )

我们将 x 添加到查询中:

db.articles.find( { $text: { $search: "x -cream -cake" } } ).projection({"dummy":0})

如果没有禁用词creamcake,结果将是这样的:

{
    "_id" : 4,
    "subject" : "baking"
},

{
    "_id" : 2,
    "subject" : "Coffee Shopping"
},

{
    "_id" : 1,
    "subject" : "coffee"
}

关于MongoDB $text 搜索仅包含否定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59574062/

相关文章:

mongodb - 无法使用docker-compose运行具有副本集的mongo容器

mongodb - Mongoose -- 强制集合名称

MongoDB - 如何查询集合中的嵌套项?

PHP 基于任意搜索查询在电子邮件数据库中搜索电子邮件地址和正文内容

php - SQL 中的博客搜索在搜索中添加标签

sql-server - 如何在 SQL Server 2008 Express 中启用全文搜索

node.js - 我如何使用 Express 构建对 MongoDB 3+ 的获取请求

php - 为 php7 设置 mongoDB 扩展

MongoDB 全文搜索 - 匹配单词和精确短语

search - 简单的文件文本搜索工具?