如何在elasticsearch中过滤多个字段和值?

时间:2018-02-04 23:37:12

标签: elasticsearch querydsl

我一直在阅读文档,并一直试图通过多个字段和列来实现过滤结果的解决方案,但是我一直在收到错误; 格式错误的查询

我想用完全相等的值过滤结果,例如:

is_active: true
category_id: [1,2,3,4]
brand: "addidas"
gender: "male"

为了让我更清楚我打算做什么,如果它用SQL编写,我就是这样运行的:

SELECT .... WHERE 
is_active= 1 AND category_id IN(1,2,3,4) 
AND brand='addidas' AND gender='male'

我在DSL中的查询如下:

{
    "body": {
        "query": {
            "nested": {
                "query": {
                    "bool": {
                        "must": {
                            "terms": {
                                "category_id": [
                                    1,
                                    2,
                                    3
                                ]
                            },
                            "term": {
                                "is_active": true
                            },
                            "term": {
                                "brand": "addidas"
                            }
                        }
                    }
                }
            }
        }
    }
}

如何按照弹性搜索中的描述过滤多个文件和值?

如果您需要我提供回答问题所需的额外信息,请发表评论。如果您添加了文档链接,请同时提供示例(包含查询dsl)的说明我当前或类似的情况应该得到解决。

1 个答案:

答案 0 :(得分:2)

使用以下代码:

"query": {
    "bool": {
        "must" : [
            {"term" : { "is_active" : true}},
            {"term" : { "gender" : "female"}},
            {"term" : { "brand" : "addidas"}},
            {"terms": { "categoryId": [1,2,3,4]}}
        ]
    }
}