【问题标题】:Is there a way to build an "or" with has_child using Bodybuilder ElasticSearch有没有办法使用 Bodybuilder ElasticSearch 用 has_child 构建“或”
【发布时间】:2017-07-14 03:06:44
【问题描述】:
{ “询问”: { “布尔”: { “应该”: [ { “有孩子”:{ "inner_hits":{}, “类型”:“emp”, “询问”: { “匹配”: { “名称”:“xyz” } } } }, { “布尔”: { “必须”: [ { “匹配”:{“名称”:“xyz”} }, { “匹配”:{“_type”:“emps”} } ], “禁止”: [ { “有孩子”:{ “类型”:“emp”, “询问”: { “存在”: { “字段”:“名称” } } } } ] } } ] } } }

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    不,很遗憾。

    事实上,是的。我错了。 OP 在 Bodybuilder 的 github 上发布了his question 并收到了如下回复:

    这有点古怪,但我就是这样写的:

    var inner = bodybuilder()
        .query('match', 'name', 'xyz')  
        .query('match', '_type', 'emps')    
        .notQuery('has_child', {type: 'emp'}, (q) => {
            return q.query('exists', 'field', 'name')
        })
        .build()
    
    bodybuilder()
        .orQuery('bool', inner.query.bool)
            .orQuery('has_child', {inner_hits: {}, type: 'emp'}, (q) => {
            return q.query('match', 'name', 'xyz')  
        })
        .build()
    

    有些东西 注意:orQuerys 的顺序在这里很重要,它不起作用 如果这些被切换,这并不理想。我认为那是因为 bool 子句是如何合并的。让我知道这不是 为你工作。

    【讨论】:

    • 抱歉让你走错路了。我更正了我的答案。
    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2022-08-05
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多