MongoDB全文搜索和查找运算符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB全文搜索和查找运算符相关的知识,希望对你有一定的参考价值。

MongoDB中的全文搜索似乎是一个很好的功能,特别是在需要高性能搜索和索引时。但是,我想知道为什么不允许对多个集合进行全文搜索。

例如:我有一个供应商和一个产品系列(每个供应商都有n个产品)我真的想搜索所有产品,但供应商的名称也应该匹配。现在我用$ lookup执行此操作,然后使用正则表达式匹配。这很有效,但速度非常慢(500-800毫秒)。

如果我使用索引的全文搜索,这将显着提高性能。但$ text-operator必须是聚合管道中的第一个阶段,不允许我先使用$ lookup。

(参见限制部分:https://docs.mongodb.com/manual/reference/operator/query/text/#op._S_text

我有什么想法可以提高多个集合的文本搜索速度?

答案

对于仍在寻找解决方案的人

db.getCollection('projects').aggregate([{
    "$match": {
        "$text": {"$search": query }
    }}, {
    "$lookup": {
        "from":         "users",
        "localField":   "uuid",
        "foreignField": "uuid",
        "as":           "user"
    }}, {
        "$sort": {
            "score": { "$meta": "textScore" }
        }
    }]);

其中query是文本搜索字符串。

这个查询是针对projects集合的关键uuid,它指的是users集合与uuid密钥,所有按相关性排序。

以上是关于MongoDB全文搜索和查找运算符的主要内容,如果未能解决你的问题,请参考以下文章

nodejs + mongodb实现模糊查询与全文搜索

MongoDB全文检索

MongoDB 设置的全文搜索选项

MongoDB 全文和部分文本搜索

确切的短语在 mongodb 全文搜索中无法正常工作

纯MongoDB实现中文全文搜索