MongoDB全文搜索和查找运算符

4
在MongoDB中进行全文搜索似乎是一个不错的功能,特别是当需要高性能搜索和索引时。然而,我想知道为什么不能在多个集合上进行全文搜索。
例如:我有一个供应商和一个产品集合(每个供应商都有n个产品),我希望能够搜索所有产品,但同时也要匹配供应商的名称。目前我是通过$lookup,然后再使用正则表达式进行匹配来实现的。这种方法虽然可行,但速度非常慢(500-800毫秒)。
如果我使用一个带有索引的全文搜索,这将显著提高性能。但$text运算符必须是聚合管道中的第一个阶段,不允许我先使用$lookup。
(请参见限制部分:https://docs.mongodb.com/manual/reference/operator/query/text/#op._S_text
有什么办法可以提高在多个集合上进行文本搜索的速度吗?
1个回答

2

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

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

查询条件是一个文本搜索字符串。

此查询适用于具有键uuidprojects集合,该键引用具有uuid键的users集合,所有结果按相关性排序。


一个非常有用的例子!此外,将"$addFields": {"score": { "$meta": "textScore" }}添加到数组中会在结果中显示score字段。 - Richard Osseweyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接