在elasticsearch查询中使用多个过滤器的正确方法

时间:2014-10-09 13:48:50

标签: elasticsearch

我设法将一些相当复杂的查询放在一起(例如,用于从数据生成热图),并且我认为我理解了查询语法,但似乎我没有。

我试图返回符合以下条件的数据:

  • 活动是MyEvent
  • 有一个名为" MyField"
  • 的字段
  • 时间戳不到一分钟。

这是我累了,它没有返回错误,但也没有返回正确的结果:

{
"query" :
{
    "filtered":
    {
        "query":
        {
            bool:
            {
                must:
                    [
                        { match: { "event": "UpdateTitle" } }
                    ]
            }
        },
        "filter" :
        {
            "range" :
            {
                "@timestamp" :
                {
                    "gt" : "now-1m"
                }
            }
        }
        ,
        "filter" :
        {
            "exists" :
            {
                "field" : "Lobby"
            }
        }
    }
}

}

显然我已经尝试过阅读文档了,但它的示例通常只是片段而不是完整的查询,并且使用同名的查询和过滤器会让它们难以置信地混淆。

1 个答案:

答案 0 :(得分:0)

这似乎产生了我想要的效果,希望它使用过滤器而不是查询:

{
"query" :
{
    "filtered":
    {
       "filter" : 
       {
            bool:
            {
                must:
                    [
                        { "term": { "event.raw": "MyEvent" } },
                        { "range" : { "@timestamp" : { "gt" : "now-1m" } } },
                        { "exists" : { "field" : "MyField" } }
                    ]
            }
        }            
    }
}

}