我的弹性查询中出错 - 范围返回错误的请求
Error in my elasticquery - Range returns bad request
我有以下函数可以进行弹性搜索:
$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);
});
}
我是弹性查询的新手,我在范围字段上收到此错误:
POST http://... 400 (Bad Request)
Object {error: "SearchPhaseExecutionException[Failed to execute ph…arse Failure [No parser for element [range]]]; }]", status: 400}error: "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;....
可能我写错了范围字段,但我发现了如何在此文档中使用它:www.elasticsearch.org/...
我想知道我在查询上做错了什么。
已编辑我只需要向范围添加另一个过滤器就可以工作了,但是如果您将范围作为必须参数,性能会更好
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" }}]
}
相关文章:
- 如何将闭包内的值返回到外部范围
- 范围变量返回长度错误
- 如何在 Google 应用脚本中 sendEmail 函数的范围内的唯一非空白列中返回值
- 返回Javascript中给定正则表达式的文本范围数组
- Angular$http返回数据,但不返回'不适用于范围
- d3范围/域返回负值
- 在全局范围内执行文件,而不是返回导出的对象
- 我从闭包返回的函数在外部范围内是否可用
- 我的弹性查询中出错 - 范围返回错误的请求
- 从显示为文本的范围中返回最小和最大数字
- 努力将结果从工厂返回到范围
- 在 Angular JS 中使用服务无法返回范围值
- 如何让此函数从范围中添加或减去并返回它
- 主干.js Model.get() 返回 undefined, 范围使用 coffeescript + coffee t
- Angular js 指令控制器访问范围属性,但返回未定义
- AngularJS 指令范围和$compile - 返回空白的变量
- Javascript 范围:为什么 foo 返回未定义
- JavaScript 函数返回范围
- 一起使用 .map(.range(1)) 的目的是什么?范围始终返回 [0]
- 在Google Apps Script中返回“范围”而不是实际字符串