如何按日期限制ElasticSearch API计数?

时间:2015-06-17 17:39:26

标签: elasticsearch

我试图在给定的时间范围内计算查询匹配的数量,使用下面指示的正文点击网址/{index}/_count

我是查询DSL的新手,所以很有可能我忽略了一些显而易见的事情。但是,将计数直接应用于现有查询并不起作用。我没有在文档中看到任何表明计数查询应该接受特殊处理的内容。

我已尝试在查询中添加范围和聚合,但我不断收到以下错误或某些变体:

  

指数:数据/读取/计数[S]]];嵌套:   QueryParsingException [[graylog2_NN]请求不支持[{label}]]

按时间戳限制查询:

{                                                                                                                                                                                 
    "query": {                                                                                                                                                                              
        "term": { "level":3 },                                                                                                                                                              
        "range": {                                                                                                                                                                          
            "timestamp": {                                                                                                                                                                  
                "from": "2015-06-16 15:10:09.322",                                                                                                                                          
                "to": "2015-06-16 16:10:09.322",                                                                                                                                            
                "include_lower": true,                                                                                                                                                      
                "include_upper": true                                                                                                                                                       
            }                                                                                                                                                                               
        }                                                                                                                                                                                   
    }                                                                                                                                                                                       
}

使用聚合:

{                                                                                                                                                                                 
    "query": {                                                                                                                                                                              
        "term": { "level":3 }                                                                                                                                                               
    },                                                                                                                                                                                      
    "aggs": {                                                                                                                                                                       
        "range": {                                                                                                                                                                          
            "date_range": {                                                                                                                                                                 
                field: "_timestamp",                                                                                                                                                        
                "ranges": {                                                                                                                                                                 
                    { "to": "now-1d" },                                                                                                                                                     
                    { "from": "now-2d" },                                                                                                                                                   
                }                                                                                                                                                                           
            }                                                                                                                                                                               
        }                                                                                                                                                                                   
    }                                                                                                                                                                                       
}

我还尝试插入从UI导出的查询(单个流显示中的错误图标),也没有任何欢乐(一小时的匹配):

{
    "from": 0,
    "size": 100,
    "query": {
        "match_all": {}
    },
    "post_filter": {
        "bool": {
            "must": [
                {
                    "range": {
                        "timestamp": {
                            "from": "2015-06-16 15:10:09.322",
                            "to": "2015-06-16 16:10:09.322",
                            "include_lower": true,
                            "include_upper": true
                        }
                    }
                },
                {
                    "query": {
                        "query_string": {
                            "query": "streams:5568c9dbe4b0b31b781bf105"
                        }
                    }
                }
            ]
        }
    },
    "sort": [
        {
            "timestamp": {
                "order": "desc"
            }
        }
    ],
    "highlight": {
        "require_field_match": false,
        "fields": {
            "*": {
                "fragment_size": 0,
                "number_of_fragments": 0
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我发现一个查询都匹配并与我从UI获得的数字非常接近(“在过去1天内搜索”):

{                                                                                                                                                                                 
    "query": {                                                                                                                                                                              
        "filtered": {                                                                                                                                                                       
            "query": {                                                                                                                                                                      
                "term": { "level":3 }                                                                                                                                                       
            },                                                                                                                                                                              
            "filter": {                                                                                                                                                                     
                "range": { "timestamp": { "gte": "now-1d" } }                                                                                                                               
            }                                                                                                                                                                               
        }                                                                                                                                                                                   
    }                                                                                                                                                                                       
}

答案 1 :(得分:0)

尝试使用bool query的以下查询。我使用不同的时间戳格式,这是elasticsearch中的默认格式。首先尝试该格式,如果没有运气,请修改时间戳格式以匹配您的格式。



{
    "query": {
        "bool" : {
            "should" : [
                {
                    "term": { "level":3 }
                },
                {
                    "range": {
                        "timestamp": {
                            "from": "2015-06-16T15:10:09",
                            "to": "2015-06-16T16:10:09"
                        }
                    }
                }
            ]
        }
    }
}




相关问题