ElasticSearch:合并嵌套查询的所有inner_hits

时间:2018-05-18 10:33:03

标签: elasticsearch elasticsearch-5

我对弹性搜索很新,并且一直在尝试创建一个查询,该查询会返回一条匹配bool查询的所有progBar.Value = 0; 条件的记录。 bool查询包含在must内。

我对象的映射如下:

constant_score: filter

我使用以下查询查询此索引:

{
    "mappings": {
        "doc": {
            "properties": {
                "available_qty": {
                    "type": "long"
                },
                "brand": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "components": {
                    "type": "nested",
                    "properties": {
                        "available_qty": {
                            "type": "long"
                        },
                        "brand": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "id": {
                            "type": "long"
                        },
                        "incoming_qty": {
                            "type": "long"
                        },
                        "name": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "on_hand_qty": {
                            "type": "long"
                        },
                        "outgoing_qty": {
                            "type": "long"
                        },
                        "parent_id": {
                            "type": "long"
                        },
                        "product_stores": {
                            "type": "nested",
                            "properties": {
                                "channel_id": {
                                    "type": "long"
                                },
                                "price": {
                                    "type": "float"
                                },
                                "store_id": {
                                    "type": "long"
                                }
                            }
                        },
                        "product_warehouses": {
                            "type": "nested",
                            "properties": {
                                "available_qty": {
                                    "type": "long"
                                },
                                "incoming_qty": {
                                    "type": "long"
                                },
                                "outgoing_qty": {
                                    "type": "long"
                                },
                                "warehouse_id": {
                                    "type": "long"
                                }
                            }
                        },
                        "quantity_in_bundle": {
                            "type": "long"
                        },
                        "sku": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "status": {
                            "type": "long"
                        },
                        "tenantId": {
                            "type": "long"
                        },
                        "type": {
                            "type": "long"
                        }
                    }
                },
                "id": {
                    "type": "long"
                },
                "image": {
                    "properties": {
                        "id": {
                            "type": "long"
                        },
                        "isDefault": {
                            "type": "boolean"
                        },
                        "thumbnail": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "url": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "incoming_qty": {
                    "type": "long"
                },
                "tags": {
                    "type": "nested",
                    "properties": {
                        "name": {
                            "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                        },
                        "color": {
                            "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                        },
                        "id": {
                            "type": "long"
                        }
                    }
                },
                "members": {
                    "type": "nested",
                    "properties": {
                        "available_qty": {
                            "type": "long"
                        },
                        "brand": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "id": {
                            "type": "long"
                        },
                        "image": {
                            "properties": {
                                "id": {
                                    "type": "long"
                                },
                                "isDefault": {
                                    "type": "boolean"
                                },
                                "url": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                }
                            }
                        },
                        "incoming_qty": {
                            "type": "long"
                        },
                        "tags": {
                            "type": "nested",
                            "properties": {
                                "name": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "color": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "id": {
                                    "type": "long"
                                }
                            }
                        },
                        "master_id": {
                            "type": "long"
                        },
                        "name": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "on_hand_qty": {
                            "type": "long"
                        },
                        "outgoing_qty": {
                            "type": "long"
                        },
                        "parent_id": {
                            "type": "long"
                        },
                        "product_stores": {
                            "type": "nested",
                            "properties": {
                                "channel_id": {
                                    "type": "long"
                                },
                                "price": {
                                    "type": "float"
                                },
                                "product_url": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "store_id": {
                                    "type": "long"
                                }
                            }
                        },
                        "product_warehouses": {
                            "type": "nested",
                            "properties": {
                                "available_qty": {
                                    "type": "long"
                                },
                                "incoming_qty": {
                                    "type": "long"
                                },
                                "outgoing_qty": {
                                    "type": "long"
                                },
                                "warehouse_id": {
                                    "type": "long"
                                }
                            }
                        },
                        "sku": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "status": {
                            "type": "long"
                        },
                        "tenantId": {
                            "type": "long"
                        },
                        "type": {
                            "type": "long"
                        }
                    }
                },
                "name": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "on_hand_qty": {
                    "type": "long"
                },
                "outgoing_qty": {
                    "type": "long"
                },
                "product_stores": {
                    "type": "nested",
                    "properties": {
                        "channel_id": {
                            "type": "long"
                        },
                        "price": {
                            "type": "float"
                        },
                        "product_url": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "store_id": {
                            "type": "long"
                        }
                    }
                },
                "product_warehouses": {
                    "type": "nested",
                    "properties": {
                        "available_qty": {
                            "type": "long"
                        },
                        "incoming_qty": {
                            "type": "long"
                        },
                        "outgoing_qty": {
                            "type": "long"
                        },
                        "warehouse_id": {
                            "type": "long"
                        }
                    }
                },
                "sku": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "status": {
                    "type": "long"
                },
                "tenantId": {
                    "type": "long"
                },
                "type": {
                    "type": "long"
                }
            }
        }
    }
}

我想要实现的目的是获取具有至少一个嵌套对象的对象,该对象匹配主bool查询中的所有{ "from": 0, "size": 20, "query": { "constant_score": { "filter": { "bool": { "must": [ { "term": { "tenantId": { "value": 88, "boost": 1 } } }, { "terms": { "type": [ 2 ], "boost": 1 } }, { "bool": { "should": [ { "terms": { "status": [ 2 ], "boost": 1 } }, { "nested": { "query": { "terms": { "members.status": [ 2 ], "boost": 1 } }, "path": "members", "ignore_unmapped": false, "score_mode": "avg", "boost": 1, "inner_hits": { "name": "members", "ignore_unmapped": false, "from": 0, "size": 100, "version": false, "explain": false, "track_scores": false, "_source": false } } } ], "adjust_pure_negative": true, "minimum_should_match": "1", "boost": 1 } }, { "bool": { "should": [ { "nested": { "query": { "terms": { "product_stores.store_id": [ 20889 ], "boost": 1 } }, "path": "product_stores", "ignore_unmapped": false, "score_mode": "avg", "boost": 1 } }, { "nested": { "query": { "nested": { "query": { "terms": { "members.product_stores.store_id": [ 20889 ], "boost": 1 } }, "path": "members.product_stores", "ignore_unmapped": false, "score_mode": "avg", "boost": 1 } }, "path": "members", "ignore_unmapped": false, "score_mode": "avg", "boost": 1, "inner_hits": { "name": "members", "ignore_unmapped": false, "from": 0, "size": 100, "version": false, "explain": false, "track_scores": false, "_source": false } } } ], "adjust_pure_negative": true, "minimum_should_match": "1", "boost": 1 } }, { "bool": { "should": [ { "nested": { "query": { "terms": { "tags.id": [ 1001 ], "boost": 1 } }, "path": "tags", "ignore_unmapped": false, "score_mode": "avg", "boost": 1 } }, { "nested": { "query": { "nested": { "query": { "terms": { "members.tags.id": [ 1001 ], "boost": 1 } }, "path": "members.tags", "ignore_unmapped": false, "score_mode": "avg", "boost": 1 } }, "path": "members", "ignore_unmapped": false, "score_mode": "avg", "boost": 1, "inner_hits": { "name": "members", "ignore_unmapped": false, "from": 0, "size": 100, "version": false, "explain": false, "track_scores": false, "_source": false } } } ], "adjust_pure_negative": true, "minimum_should_match": "1", "boost": 1 } } ], "adjust_pure_negative": true, "boost": 1 } }, "boost": 1 } }, "sort": [ { "_id": { "order": "desc" } } ] } 条件。但是即使没有一个对象匹配所有对象,我也会得到记录。例如,如果有一条记录只匹配muststatus而不是tags,那么尽管所有条件都是store_ids的一部分,但搜索将返回它。有人可以解释一下这个查询的行为吗?我试过阅读文件,但我很茫然。

任何指针或指导都将非常感激。

谢谢!

更新

我通过在单个嵌套必需项下合并所有嵌套的应用程序来修复此问题。

1 个答案:

答案 0 :(得分:0)

在您的查询中,您正在使用should子句,即使它们与所有should子句条件都不匹配,也会返回结果。您的must子句优先于should子句。

根据Bool Query文档,您可以调整minimum should match参数。