You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Atlas Search Compound Must聚合检索根文档与嵌入文档字段

问题场景

示例文档:

{
    "_id": "101",
    "PublisherName": "Big book publishers",
    "PublisherAddress": "123 Mian Street",
    "Books": [
        {
            "_id": "6791913210",
            "Title": "Piano made simple",
            "Author": "John Bent"
        },
        {
            "_id": "6638200210",
            "Title": "Guitar made simple",
            "Author": "Kim Larry"
        }
    ]
}

需求:返回同时满足以下两个条件的文档:

  • 根文档的PublisherName字段包含"Big"
  • 嵌入文档Books的Title字段包含"Piano"

原有错误查询无法返回目标文档:

{
    "$search": {
        "index": "my-book-Index",
        "compound": {
            "must": [
                {
                    "text": {
                        "query": "Big",
                        "path": [
                            "PublisherName",
                            "PublisherAddress"
                        ]
                    }
                },
                {
                    "text": {
                        "query": "Piano",
                        "path": [
                            "PublisherName",
                            "PublisherAddress"
                        ]
                    }
                },
                {
                    "embeddedDocument": {
                        "operator": {
                            "compound": {
                                "must": [
                                    {
                                        "text": {
                                            "query": "Big",
                                            "path": [
                                                "Books.Title",
                                                "Books.Author"
                                            ]
                                        }
                                    },
                                    {
                                        "text": {
                                            "query": "Piano",
                                            "path": [
                                                "Books.Title",
                                                "Books.Author"
                                            ]
                                        }
                                    }
                                ]
                            }
                        },
                        "path": "Books"
                    }
                }
            ]
        }
    }
}
错误原因
  1. 额外添加了针对根字段PublisherName/PublisherAddress的"Piano"查询,这两个字段不包含"Piano",直接导致查询无结果
  2. 嵌入文档查询里错误加入了"Big"的条件,嵌入文档的Title/Author字段不存在"Big",不符合需求逻辑
正确聚合语句
{
    "$search": {
        "index": "my-book-Index",
        "compound": {
            "must": [
                // 根文档条件:PublisherName包含"Big"
                {
                    "text": {
                        "query": "Big",
                        "path": "PublisherName"
                    }
                },
                // 嵌入文档条件:Books数组中存在Title包含"Piano"的元素
                {
                    "embeddedDocument": {
                        "operator": {
                            "text": {
                                "query": "Piano",
                                "path": "Books.Title"
                            }
                        },
                        "path": "Books"
                    }
                }
            ]
        }
    }
}
说明
  • 根字段查询直接指定PublisherName作为路径,精准匹配需求,避免不必要的字段扫描
  • 嵌入文档查询中,embeddedDocument的path指定为Books,内部的text查询精准定位Books.Title字段,确保只检查图书标题中是否包含"Piano"
  • 外层compound的must数组确保两个条件同时满足,符合需求的"与"逻辑

内容的提问来源于stack exchange,提问作者O'Neil Tomlinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:13:10