使用Elasticsearch,如何对文档属性和嵌套文档属性进行过滤查询?

时间:2015-01-29 16:14:25

标签: elasticsearch

以下是示例文档来源。

{
     "tags": [
         "meow",
         "cats",
         "feline"
    ],
    "visible": 1,
    "for_sale": "y",
    "title": "Cat Meow",
    "stock": [{
        "department": "mens",
        "size": "small"
    }, {
        "department": "mens",
        "size": "medium"
    }]
}

我想找到的文件是“stock.department = mens'和' stock.size = medium'并且也是' for_sale = y'

这是我到目前为止提出的查询。我无法弄清楚如何按for_sale = y过滤。

{
    "size": 5,
    "query": {
        "filtered": {
            "query": {
                "multi_match": {
                    "fields": ["title", "tags"],
                    "query": "cat"
                }
            },
            "filter": {
                "nested": {
                    "path": "stock",
                    "filter": {
                        "bool": {
                            "must": [{
                                "term": {
                                    "stock.size": "medium"
                                }
                            }, {
                                "term": {
                                    "stock.department": "mens"
                                }
                            }]
                        }
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这就是我想出来的。如果有人有任何批评或改进,请分享。

{
    "size": 5,
    "query": {
        "filtered": {
            "query": {
                "multi_match": {
                    "fields": ["title", "tags"],
                    "query": "cat"
                }
            },
            "filter": {
                "bool": {
                    "must": [{
                        "term": {
                            "for_sale": "y"
                        }
                    }, {
                        "term": {
                            "visible": 1
                        }
                    }, {
                        "nested": {
                            "path": "stock",
                            "filter": {
                                "bool": {
                                    "must": [{
                                        "term": {
                                            "stock.size": "medium"
                                        }
                                    }, {
                                        "term": {
                                            "stock.department": "mens"
                                        }
                                    }]
                                }
                            }
                        }
                    }]
                }
            }
        }
    }
}