首页 > 解决方案 > 如何在运行 MongoDB Atlas 全文搜索之前应用过滤器?

问题描述

根据有关Atlas Search的文档,它指出:

$search 必须是它出现的任何管道的第一阶段。

那么如果是这样的话,你如何应用 Mongo 过滤器。将这些过滤器应用于搜索的输出似乎非常违反直觉?

我们正在考虑使用 Mongodb 全文搜索作为 Algolia 的替代方案,但是这个限制似乎很奇怪

当前管道:

const pipeline = [
    {
        $search: {
            text: {
                query,
                path: fields,
                fuzzy: {
                    maxEdits: 1,
                    maxExpansions: 50,
                },
            },
        },
    },
    {
        $match: {
            someField: 1,
        },
    },
];

标签: mongodbmongodb-atlasmongodb-atlas-search

解决方案


someField在这种情况下,在 Atlas Search中将索引作为数字可能会更好,因为它支持使用范围运算符复合来组合结果的数字类型。由于整个查询是在 Lucene 中运行的,它应该更快地返回结果。

const pipeline = [
    {
        $search: {
            compound: {
                should: {
                    text: {
                        query,
                        path: fields,
                        fuzzy: {
                            maxEdits: 1,
                            maxExpansions: 50,
                        },
                    },
                },
                filter: {
                    range: { 
                        path: "someField",
                        lte: 1,
                        gte: 1
                    }
                }
            }

        }
    }
];

推荐阅读