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

Popular posts from this blog

elasticsearch - what is the equivalent data type for geo_point in hibernate search? -

firebase - How to wait value in Ionic 2 -

Jenkins: find build number for git commit -