diff --git a/app.js b/app.js index e0a8591f..869628de 100644 --- a/app.js +++ b/app.js @@ -37,24 +37,18 @@ app.get( '/', controllers.index() ); // doc API app.get( '/doc', sanitisers.doc.middleware, controllers.doc() ); -// suggest API -app.get( '/suggest', sanitisers.suggest.middleware, controllers.suggest() ); -app.get( '/suggest/nearby', - sanitisers.suggest.middleware, - controllers.suggest(undefined, undefined, require('./helper/queryMixer').suggest_nearby) ); -app.get( '/suggest/coarse', - sanitisers.coarse.middleware, - controllers.suggest(undefined, undefined, require('./helper/queryMixer').coarse) ); - -// search API +// suggest APIs +app.get( '/suggest', sanitisers.search.middleware, controllers.search() ); +app.get( '/suggest/nearby', sanitisers.suggest.middleware, controllers.search() ); +app.get( '/suggest/coarse', sanitisers.coarse.middleware, controllers.search() ); + +// search APIs app.get( '/search', sanitisers.search.middleware, controllers.search() ); +app.get( '/search/coarse', sanitisers.coarse.middleware, controllers.search() ); // reverse API app.get( '/reverse', sanitisers.reverse.middleware, controllers.search(undefined, require('./query/reverse')) ); -// coarse API -app.get( '/search/coarse', sanitisers.coarse.middleware, controllers.search() ); - /** ----------------------- error middleware ----------------------- **/ app.use( require('./middleware/404') ); diff --git a/query/search.js b/query/search.js index fa33208a..0e9a6b74 100644 --- a/query/search.js +++ b/query/search.js @@ -21,18 +21,19 @@ function generate( params ){ // add search condition to filtered query query.query.filtered.query = { 'bool': { - 'must': [{ - 'match': { - 'name.default': params.input - } + 'must': [{ + 'match': { + 'name.default': params.input } - ] + }] } }; + // should query contitions + query.query.filtered.query.bool.should = []; + if (params.input_admin) { var admin_fields = ['admin0', 'admin1', 'admin1_abbr', 'admin2', 'alpha3']; - query.query.filtered.query.bool.should = []; admin_fields.forEach(function(admin_field) { var match = {}; @@ -43,6 +44,14 @@ function generate( params ){ }); } + // add phrase matching query + // note: this is required for shingle/phrase matching + query.query.filtered.query.bool.should.push({ + 'match': { + 'phrase.default': params.input + } + }); + query.sort = query.sort.concat( sort( params ) ); return query; diff --git a/test/ciao/suggest/nearby_nobias.coffee b/test/ciao/suggest/nearby_nobias.coffee new file mode 100644 index 00000000..df0b7930 --- /dev/null +++ b/test/ciao/suggest/nearby_nobias.coffee @@ -0,0 +1,6 @@ + +#> suggest without geo bias +path: '/suggest/nearby?input=a' + +#? 400 bad request +response.statusCode.should.equal 400 \ No newline at end of file diff --git a/test/unit/query/search.js b/test/unit/query/search.js index cc8f7342..a56bafa1 100644 --- a/test/unit/query/search.js +++ b/test/unit/query/search.js @@ -76,12 +76,16 @@ var expected = { 'filtered': { 'query': { 'bool': { - 'must': [{ - 'match': { - 'name.default': 'test' - } + 'must': [{ + 'match': { + 'name.default': 'test' + } + }], + 'should': [{ + 'match': { + 'phrase.default': 'test' } - ] + }] } }, 'filter': { @@ -154,12 +158,16 @@ module.exports.tests.query = function(test, common) { 'filtered': { 'query': { 'bool': { - 'must': [{ - 'match': { - 'name.default': 'test' - } + 'must': [{ + 'match': { + 'name.default': 'test' + } + }], + 'should': [{ + 'match': { + 'phrase.default': 'test' } - ] + }] } }, 'filter': { @@ -190,12 +198,16 @@ module.exports.tests.query = function(test, common) { 'filtered': { 'query': { 'bool': { - 'must': [{ - 'match': { - 'name.default': 'test' - } + 'must': [{ + 'match': { + 'name.default': 'test' + } + }], + 'should': [{ + 'match': { + 'phrase.default': 'test' } - ] + }] } }, 'filter': { @@ -215,7 +227,7 @@ module.exports.tests.query = function(test, common) { } ] } - } + } } }, 'sort': [