elasticsearch,Javascript,elasticsearch" /> elasticsearch,Javascript,elasticsearch" />

Javascript 我的elasticquery中出错-范围返回错误的请求

Javascript 我的elasticquery中出错-范围返回错误的请求,javascript,elasticsearch,Javascript,elasticsearch,我有以下功能,可以进行弹性搜索: $scope.getLocationHistory = function(device, lastTime){ console.log("Device location searching"); query = { "query": { "bool": { "must": [ { "term": {"device

我有以下功能,可以进行弹性搜索:

$scope.getLocationHistory = function(device, lastTime){

    console.log("Device location searching");

    query = {
        "query": {
            "bool": {          
                "must": [
                    { "term": {"deviceId":device} },
                    { "match": {"eventType":"Connected"} } 
                ],
                "must_not":[
                    {"query_string": {
                            "query": "Pong",
                            "fields": ["data.message"]
                        }
                    },
                ] 
            }                  
        },
        "range" : {
            "timestamp" : {
                "gt" : "now-1h"
            }
        },
        "filter" : {
            "exists" : { "field" : "data.location" }
        },
        "sort": [{ "timestamp": { "order": "desc" }}]
    }

    $http.post(databaseLocation+"/canary/_search", query).success(function(data, status, headers, config){
        $scope.getMapHistory(data.hits.hits); //Auxiliary function
    }).error(function(data, status, headers, config){
        console.log(data);
    }); 

}
我是弹性查询的新手,在范围字段中出现以下错误:

POSThttp://... 400(错误请求)
对象{error:“SearchPhaseExecutionException[未能执行ph…arse失败[元素[range]]没有解析器];}]”,状态:400}错误:“SearchPhaseExecutionException[未能执行阶段[query],所有碎片失败;…

可能我写错了范围字段,但我发现如何在该文档上使用它:

我想知道我在查询中做错了什么。

编辑 我只需要在范围中添加另一个过滤器,它就可以工作了,但是如果将范围作为一个必须参数,性能会更好

    query = {
        "query": {
            "bool": {          
                "must": [
                    { "range" : { "timestamp" : { "gt" : timeRange }}},
                    { "term": {"deviceId":device} },
                    { "match": {"eventType":"Connected"} } 
                ],
                "must_not":[{
                        "query_string": {
                            "query": "Pong",
                            "fields": ["data.message"]
                        }
                    },
                ] 
            },

        },
        "filter": { 
            "exists" : { "field":"data.location" }
        },
        "sort": [{ "timestamp": { "order": "desc" }}]
    }

哦,是的。我还做了另一个更改。如果将范围放在must bool中,性能会更好,比如:
“must”:[{“range”:{“timestamp”:{“gt”:timeRange}}},{“term”:{“deviceId”:device},{“match”{“eventType”:“Connected”}],
尝试这种方法,您会发现它比在过滤器中使用范围快10倍。@tedder42