diff --git a/query/search.js b/query/search.js index 0e9a6b74..bc77bf8f 100644 --- a/query/search.js +++ b/query/search.js @@ -44,6 +44,15 @@ function generate( params ){ }); } + // add category mapping + if (params.categories) { + query.query.filtered.query.bool.should.push({ + 'match': { + 'category': params.categories + } + }); + } + // add phrase matching query // note: this is required for shingle/phrase matching query.query.filtered.query.bool.should.push({ diff --git a/sanitiser/_categories.js b/sanitiser/_categories.js index f29c9fd0..3ad26f58 100644 --- a/sanitiser/_categories.js +++ b/sanitiser/_categories.js @@ -27,6 +27,10 @@ function sanitize( req ){ }); } + if (clean.categories.length === 0) { + delete clean.categories; + } + // pass validated params to next middleware req.clean = clean; diff --git a/sanitiser/search.js b/sanitiser/search.js index d226dbd9..9cfebe4e 100644 --- a/sanitiser/search.js +++ b/sanitiser/search.js @@ -5,7 +5,8 @@ var _sanitize = require('../sanitiser/_sanitize'), size: require('../sanitiser/_size'), layers: require('../sanitiser/_layers'), details: require('../sanitiser/_details'), - latlonzoom: require('../sanitiser/_geo') + latlonzoom: require('../sanitiser/_geo'), + categories: require('../sanitiser/_categories') }; var sanitize = function(req, cb) { _sanitize(req, sanitizers, cb); }; diff --git a/test/unit/sanitiser/reverse.js b/test/unit/sanitiser/reverse.js index bb1a6a98..15d6e521 100644 --- a/test/unit/sanitiser/reverse.js +++ b/test/unit/sanitiser/reverse.js @@ -9,8 +9,7 @@ var suggest = require('../../../sanitiser/reverse'), 'locality', 'local_admin', 'osmaddress', 'openaddresses' ], lon: 0, size: 10, - details: true, - categories: [] + details: true }, sanitize = function(query, cb) { _sanitize({'query':query}, cb); };