在运行MongoDB Atlas全文搜索之前,如何应用过滤器?

问题描述 投票:1回答:1

根据文档中关于 阿特拉斯搜索,它规定。

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

如果是这样的话,你如何应用Mongo过滤器呢? 在搜索的输出上应用这些过滤器是否有悖常理?

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

目前正在进行中。

const pipeline = [
    {
        $search: {
            text: {
                query,
                path: fields,
                fuzzy: {
                    maxEdits: 1,
                    maxExpansions: 50,
                },
            },
        },
    },
    {
        $match: {
            someField: 1,
        },
    },
];
mongodb mongodb-atlas mongodb-atlas-search
1个回答
1
投票

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

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

        }
    }
];
© www.soinside.com 2019 - 2024. All rights reserved.