diff --git a/src/backend/elasticsearch.js b/src/backend/elasticsearch.js index c2e9331e..ed571fea 100644 --- a/src/backend/elasticsearch.js +++ b/src/backend/elasticsearch.js @@ -79,6 +79,19 @@ this.recline.Backend = this.recline.Backend || {}; } delete out.q; } + // now do filters (note the *plural*) + if (out.filters && out.filters.length) { + if (!out.filter) { + out.filter = {} + } + if (!out.filter.and) { + out.filter.and = []; + } + out.filter.and = out.filter.and.concat(out.filters); + } + if (out.filters != undefined) { + delete out.filters; + } return out; }, query: function(model, queryObj) { diff --git a/test/backend.elasticsearch.test.js b/test/backend.elasticsearch.test.js index 4fc931cb..9af34e2d 100644 --- a/test/backend.elasticsearch.test.js +++ b/test/backend.elasticsearch.test.js @@ -20,6 +20,12 @@ test("ElasticSearch queryNormalize", function() { in_.q = 'abc'; var out = backend._normalizeQuery(in_); equal(out.query.query_string.query, 'abc'); + + var in_ = new recline.Model.Query(); + in_.addTermFilter('xyz', 'XXX'); + in_ = in_.toJSON(); + var out = backend._normalizeQuery(in_); + deepEqual(out.filter.and[0], {term: { xyz: 'XXX'}}); }); var mapping_data = {