Elasticsearch malformed query, expected [END_OBJECT] but found [FIELD_NAME] -
i'm using elasticsearch client doing search query using constant_score , aggregations it's throwing exception:
[parsing_exception] [constant_score] malformed query, expected [end_object] found [field_name]
this i'm creating query , calling search function:
fetchdata: function fetchfn(req, res, next) { var model = new urlmodel(); util.log('fetching data es::'); var query = buildaggregateurl(req.reqdata); // if (req.reqdata['domain']) { // var termfilter = { "term": { "domain": req.reqdata.domain } }; // query.constant_score.filter.bool.must.push(termfilter); // } model.search({ query }, function (er, re) { if (re) { req.sendresult = re; } next(er); }); function buildaggregateurl(opts) { var query = { constant_score: { filter: { bool: { must: [{ "range": { "timestamp": { "gte": opts.starttime, "lte": opts.endtime } } }] } } }, aggs: { success: { scripted_metric: { init_script: "params._agg.succ=0;", map_script: "if(doc.status.value=='success'){params._agg.succ+=1}", combine_script: "return params._agg.succ", reduce_script: "int sum=0;for (a in params._aggs){sum+=a}return sum" } }, failure: { scripted_metric: { init_script: "params._agg.fail=0;", map_script: "if(doc.status.value=='failure'){params._agg.fail+=1}", combine_script: "return params._agg.fail", reduce_script: "int sum=0;for (a in params._aggs){sum+=a}return sum" } } } }; return query; } } , search function looks like: es_model.prototype.search = function (opts, cb) { var query = { index: this.esconfig.index, type: this.esconfig.type, body: {query:opts.query} }; console.log('query ===> ',query); this.client.search(query, cb); } i can't figure out problem syntax.i tried wrapping constant_score key withtin query doesn't seem work.
you're missing query element @ top level:
{ query: { constant_score: { filter: { bool: { must: [{ "range": { "timestamp": { "gte": opts.starttime, "lte": opts.endtime } } }] } } } }, aggs: { success: { scripted_metric: { init_script: "params._agg.succ=0;", map_script: "if(doc.status.value=='success'){params._agg.succ+=1}", combine_script: "return params._agg.succ", reduce_script: "int sum=0;for (a in params._aggs){sum+=a}return sum" } }, failure: { scripted_metric: { init_script: "params._agg.fail=0;", map_script: "if(doc.status.value=='failure'){params._agg.fail+=1}", combine_script: "return params._agg.fail", reduce_script: "int sum=0;for (a in params._aggs){sum+=a}return sum" } } } } also note client code should this:
es_model.prototype.search = function (opts, cb) { var query = { index: this.esconfig.index, type: this.esconfig.type, body: opts.query }; this.client.search(query, cb); } wiki
Comments
Post a Comment