如果查询参数等于True,则在嵌套字段上搜索

时间:2016-11-10 02:40:01

标签: json elasticsearch

我需要搜索如下的嵌套字段:

    "bool": {
    "should": {
        "nested": {
            "path": "partnerData",
            "query": {
                "query_string": {
                    "query": "Dimmi",
                    "fields": ["partnerData.partnerName"]
                }
            }
        }
    }
}

我现在需要做的是从查询参数中选择此过滤器。

如果online-booking: true应用此过滤器,则online-booking: false不应用过滤器。

我怎样才能做到这一点?

谢谢, 马可

2 个答案:

答案 0 :(得分:0)

您应该使用多个bool查询。 第一个查询确保在线预订是错误的,第二个确保其真实和第二个条件也是如此。至少有一个查询必须匹配才能返回

xcasset

答案 1 :(得分:0)

                "bool": {
                    "should": [{
                        "nested": {
                            "path": "partnerData",
                            "query": {
                                "query_string": {
                                    "query": "Dimmi",
                                    "fields": ["partnerData.partnerName"]
                                }
                            }
                        }
                    },{
                        "query_string": {
                            "query": "$negate-online-booking$",
                            "default_field": "name"
                        }
                    }]
                }

如果negate-online-booking_exists_:name不同,则会应用过滤器。如果其值等于_exists_:name,则不会应用过滤器。

如果有更好的方法可以达到相同的效果,请提出建议。