繁体   English   中英

Elasticsearch:多层嵌套查询不起作用

[英]Elasticsearch: Multi-level nested query not working

我的映射如下:

{
    "mappings": {
        "person": {
            "properties": {
                "lastUpdated": {
                    "type": "long"
                },
                "isDeleted": {
                    "type": "boolean"
                },
                "person": {
                    "properties": {
                        "car": {
                            "type": "nested",
                            "properties": {
                                "model": {
                                    "type": "string"
                                },
                                "make": {
                                    "type": "string"
                                }
                            }
                        },
                        "last_name": {
                            "type": "string"
                        },
                        "first_name": {
                            "type": "string"
                        }
                    }
                }
            }
        }
    }
}

我有两个文件:

{
    "person": {
        "first_name": "Bob",
        "last_name": "Doe",
        "car": [
            {
                "make": "Saturn",
                "model": "Imprezza"
            },
            {
                "make": "Honda",
                "model": "Accord"
            }
        ]
    },
    "isDeleted": false,
    "lastUpdated": 1433257051959
}

{
    "person": {
        "first_name": "Zach",
        "last_name": "Foobar",
        "car": [
            {
                "make": "Saturn",
                "model": "SL"
            },
            {
                "make": "Subaru",
                "model": "Imprezza"
            }
        ]
    },
    "isDeleted": false,
    "lastUpdated": 1433257051959
}

我想查询car.make字段,因此,我编写了以下查询:

{
    "query": {
        "nested": {
            "path": "person.person.car",
            "query": {
                "match": {
                    "car.make": "Saturn"
                }
            },
            "inner_hits": {}
        }
    }
}

但是,我没有得到任何回报。 当我删除person级别的对象并尝试搜索时,它就会起作用。 任何想法如何去做多层次的嵌套查询?


编辑:另一方面,当我像这样构造我的数据并查询时,它就可以工作。

{
    "mappings": {
        "person": {
            "properties": {
                "car": {
                    "type": "nested",
                    "properties": {
                        "model": {
                            "type": "string"
                        },
                        "make": {
                            "type": "string"
                        }
                    }
                },
                "last_name": {
                    "type": "string"
                },
                "first_name": {
                    "type": "string"
                }
            }
        }
    }
}

{
    "first_name": "Zach",
    "last_name": "Foobar",
    "car": [
        {
            "make": "Saturn",
            "model": "SL"
        },
        {
            "make": "Subaru",
            "model": "Imprezza"
        }
    ]
}

{
    "first_name": "Bob",
    "last_name": "Doe",
    "car": [
        {
            "make": "Saturn",
            "model": "Imprezza"
        },
        {
            "make": "Honda",
            "model": "Accord"
        }
    ]
}

{
    "query": {
        "nested": {
            "path": "person.car",
            "query": {
                "match": {
                    "car.make": "Honda"
                }
            },
            "inner_hits": {}
        }
    }
}

这种查询方式。 我觉得这与多层嵌套有关。 多级嵌套不起作用。

嵌套的路径属性需要为“ person.car”。

如果希望人员为嵌套字段类型,则在(第二级)人员属性行上方添加“类型”:“嵌套”,这是嵌套查询搜索所必需的。 默认字段类型是对象字段。

您使用的命名令人困惑,请尝试重命名您的映射,以免使用人员两次。

{
    "query": {
        "nested": {
            "path": "person.car",
            "query": {
                "match": {
                    "make": "Saturn"
                }
            },
            "inner_hits": {}
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM