簡體   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