diff --git a/test/unit/query/search.js b/test/unit/query/search.js index f7766b7e..656665c5 100644 --- a/test/unit/query/search.js +++ b/test/unit/query/search.js @@ -4,6 +4,7 @@ var admin_boost = 'admin_boost'; var population = 'population'; var popularity = 'popularity'; var category = 'category'; +var parser = require('../../../helper/query_parser'); var category_weights = require('../../../helper/category_weights'); var admin_weights = require('../../../helper/admin_weights'); var weights = require('pelias-suggester-pipeline').weights; @@ -239,6 +240,309 @@ module.exports.tests.query = function(test, common) { t.deepEqual(query, expected, 'valid search query'); t.end(); }); + + test('valid query with a full valid address', function(t) { + var address = '123 main st new york ny 10010 US'; + var query = generate({ input: address, + layers: [ 'geoname', 'osmnode', 'osmway', 'admin0', 'admin1', 'admin2', 'neighborhood', + 'locality', 'local_admin', 'osmaddress', 'openaddresses' ], + size: 10, + details: true, + parsed_input: parser(address), + default_layers_set: true + }); + + var expected = { + 'query': { + 'filtered': { + 'query': { + 'bool': { + 'must': [ + { + 'match': { + 'name.default': '123 main st' + } + } + ], + 'should': [ + { + 'match': { + 'address.number': 123 + } + }, + { + 'match': { + 'address.street': 'main st' + } + }, + { + 'match': { + 'address.zip': 10010 + } + }, + { + 'match': { + 'admin1_abbr': 'NY' + } + }, + { + 'match': { + 'alpha3': 'USA' + } + }, + { + 'match': { + 'admin2': 'new york' + } + }, + { + 'match': { + 'phrase.default': '123 main st' + } + } + ] + } + }, + 'filter': { + 'bool': { + 'must': [] + } + } + } + }, + 'size': 10, + 'sort': [ + '_score', + { + '_script': { + 'file': 'admin_boost', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'file': 'popularity', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'file': 'population', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'params': { + 'weights': { + 'admin0': 4, + 'admin1': 3, + 'admin2': 2, + 'local_admin': 1, + 'locality': 1, + 'neighborhood': 1 + } + }, + 'file': 'weights', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'params': { + 'category_weights': { + 'transport:air': 2, + 'transport:air:aerodrome': 2, + 'transport:air:airport': 2 + } + }, + 'file': 'category', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'params': { + 'weights': { + 'geoname': 0, + 'address': 4, + 'osmnode': 6, + 'osmway': 6, + 'poi-address': 8, + 'neighborhood': 10, + 'local_admin': 12, + 'locality': 12, + 'admin2': 12, + 'admin1': 14, + 'admin0': 2 + } + }, + 'file': 'weights', + 'type': 'number', + 'order': 'desc' + } + } + ], + 'track_scores': true + }; + + t.deepEqual(query, expected, 'valid search query'); + t.end(); + }); + + test('valid query with partial address', function(t) { + var partial_address = 'soho grand, new york'; + var query = generate({ input: partial_address, + layers: [ 'geoname', 'osmnode', 'osmway', 'admin0', 'admin1', 'admin2', 'neighborhood', + 'locality', 'local_admin', 'osmaddress', 'openaddresses' ], + size: 10, + details: true, + parsed_input: parser(partial_address), + default_layers_set: true + }); + + var expected = { + 'query': { + 'filtered': { + 'query': { + 'bool': { + 'must': [ + { + 'match': { + 'name.default': 'soho grand' + } + } + ], + 'should': [ + { + 'match': { + 'admin2': 'new york' + } + }, + { + 'match': { + 'admin1': 'new york' + } + }, + { + 'match': { + 'admin1_abbr': 'new york' + } + }, + { + 'match': { + 'admin0': 'new york' + } + }, + { + 'match': { + 'alpha3': 'new york' + } + }, + { + 'match': { + 'phrase.default': 'soho grand' + } + } + ] + } + }, + 'filter': { + 'bool': { + 'must': [] + } + } + } + }, + 'size': 10, + 'sort': [ + '_score', + { + '_script': { + 'file': 'admin_boost', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'file': 'popularity', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'file': 'population', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'params': { + 'weights': { + 'admin0': 4, + 'admin1': 3, + 'admin2': 2, + 'local_admin': 1, + 'locality': 1, + 'neighborhood': 1 + } + }, + 'file': 'weights', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'params': { + 'category_weights': { + 'transport:air': 2, + 'transport:air:aerodrome': 2, + 'transport:air:airport': 2 + } + }, + 'file': 'category', + 'type': 'number', + 'order': 'desc' + } + }, + { + '_script': { + 'params': { + 'weights': { + 'geoname': 0, + 'address': 4, + 'osmnode': 6, + 'osmway': 6, + 'poi-address': 8, + 'neighborhood': 10, + 'local_admin': 12, + 'locality': 12, + 'admin2': 12, + 'admin1': 14, + 'admin0': 2 + } + }, + 'file': 'weights', + 'type': 'number', + 'order': 'desc' + } + } + ], + 'track_scores': true + }; + + t.deepEqual(query, expected, 'valid search query'); + t.end(); + }); }; module.exports.all = function (tape, common) {