diff --git a/query/suggest_multiple.js b/query/suggest_multiple.js index d934d63d..cd3144c5 100644 --- a/query/suggest_multiple.js +++ b/query/suggest_multiple.js @@ -4,7 +4,15 @@ var logger = require('../src/logger'); // Build pelias suggest query function generate( params, precision ){ - var getPrecision = function(zoom) { + var CmdGenerator = function(params){ + this.params = params; + this.cmd = { + 'text': params.input + }; + }; + + CmdGenerator.prototype.get_precision = function() { + var zoom = this.params.zoom; switch (true) { case (zoom > 15): return 5; // zoom: >= 16 @@ -16,81 +24,37 @@ function generate( params, precision ){ return 2; // zoom: 4-5 default: return 1; // zoom: 1-3 or when zoom: undefined - } + } }; - var cmd = { - 'text' : params.input, - 'pelias_1' : { - 'completion' : { - 'size' : params.size, - 'field' : 'suggest', - 'context': { - 'dataset': params.layers, - 'location': { - 'value': [ params.lon, params.lat ], - 'precision': 5 - } - } - } - }, - 'pelias_2' : { - 'completion' : { - 'size' : params.size, - 'field' : 'suggest', - 'context': { - 'dataset': params.layers, - 'location': { - 'value': [ params.lon, params.lat ], - 'precision': 3 - } - } - } - }, - 'pelias_3' : { + CmdGenerator.prototype.add_suggester = function(name, precision, layers, fuzzy) { + this.cmd[name] = { 'completion' : { - 'size' : params.size, + 'size' : this.params.size, 'field' : 'suggest', 'context': { - 'dataset': params.layers, + 'dataset': layers || this.params.layers, 'location': { - 'value': [ params.lon, params.lat ], - 'precision': 1 - } - } - } - }, - 'pelias_4' : { - 'completion' : { - 'size' : params.size, - 'field' : 'suggest', - 'context': { - 'dataset': ['admin0', 'admin1', 'admin2'], - 'location': { - 'value': [ params.lon, params.lat ], - 'precision': precision || getPrecision(params.zoom) - } - } - } - }, - 'pelias_5' : { - 'completion' : { - 'size' : params.size, - 'field' : 'suggest', - 'context': { - 'dataset': params.layers, - 'location': { - 'value': [ params.lon, params.lat ], - 'precision': 3 + 'value': [ this.params.lon, this.params.lat ], + 'precision': precision || this.get_precision() } }, - 'fuzzy': {} + 'fuzzy': { + 'fuzziness': fuzzy || 0 + } } - } + }; }; - // logger.log( 'cmd', JSON.stringify( cmd, null, 2 ) ); - return cmd; + var cmd = new CmdGenerator(params); + cmd.add_suggester('pelias_1', 5); + cmd.add_suggester('pelias_2', 3); + cmd.add_suggester('pelias_3', 1); + cmd.add_suggester('pelias_4', undefined, ['admin0', 'admin1', 'admin2']); + cmd.add_suggester('pelias_5', 3, undefined, 'AUTO'); + + // logger.log( 'cmd', JSON.stringify( cmd.cmd, null, 2 ) ); + return cmd.cmd; }