Mongo Atlas 将 $search 与 match 结合起来

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

我正在使用 $match 和 $regex、$in、$eq、$size、$gte 等运算符通过hard数据(数字、其他值)搜索集合。

{'$match': {'$and': [{'isbn': {'$exists': 1}}, {'form': {'$in': ['BC']}}]}}

使用 $facet,我可以计算找到的匹配项。

出于其他目的,我使用 $search 索引进行漂亮的文本搜索。我得到分数、突出显示和批次,并且再次(但不是通过 $facet)找到找到的匹配项的count

$search': {
    'index': 'default',
    'compound': {
        'must': [
            how...
        ],
    },
    'count': {'type': 'total'},
}

我可以结合 $match 和 $search,但无法获得正确的计数。 $search 不能与 $facet 结合使用,如果没有 $facet,文本搜索始终会计算文本搜索找到的内容,而不考虑不匹配的文档。

如何将两者结合起来?在 Atlas 的文本搜索中添加复合过滤器或使用有限数量的运算符是不够的。

底线,这都是关于正确的结果计数

谢谢。

mongodb match atlas text-search
1个回答
0
投票

简短的回答是你不能。

$search
阶段使用完全不同的索引和方法来“匹配”文档,因此存在限制,它必须是管道中的第一步,并且不能嵌套在
$facet
中。

消除这些限制基本上只会运行 2 个查询,这是您必须做的。

const count = await collection.aggregate([...matchStage, ...countStage])
const highlights = await collection.aggregate([...searchStage, ...matchStage])

ElasticSearch 中可能的方法是使用 children 管道,但据我所知,这在图集搜索上尚不可用。

© www.soinside.com 2019 - 2024. All rights reserved.