如何在elasticsearch中组合两个以上的过滤器?

时间:2016-11-18 14:29:40

标签: elasticsearch

我想为elasticsearch 1.7写这样的查询:

SELECT * FROM prods WHERE 
id=1 AND 
name='flower' AND 
(count_usd=1 OR prise_usd=5) AND 
(count_eur=1 OR prise_eur=5)

? 我已经了解了嵌套bool(https://www.elastic.co/guide/en/elasticsearch/guide/1.x/combining-filters.html),但无法将其应用于我的上下文: - (

1 个答案:

答案 0 :(得分:0)

您可以在bool查询中嵌套bool查询以实现此类过滤:

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "must": [{
                        "term": {"name":"flower"}
                    }],
                    "should": [{
                        "bool": {
                            "should": [{
                                "term": {
                                    "count_usd": 1
                                }
                            }, {
                                "term": {
                                    "prise_usd": 5
                                }
                            }]
                        }
                    }, {
                        "bool": {
                            "should": [{
                                "term": {
                                    "count_eur": 1
                                }
                            }, {
                                "term": {
                                    "prise_eur": 5
                                }
                            }]
                        }
                    }]
                }
            }
        }
    }
}

请注意,should子句的作用类似于ORshould中至少有一个子句必须为true才能匹配。