mirror of https://github.com/pelias/api.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.2 KiB
48 lines
1.2 KiB
|
|
/** |
|
|
|
cmd can be any valid ES suggest command |
|
|
|
**/ |
|
var peliasLogger = require( 'pelias-logger' ).get( 'service/suggest' ); |
|
|
|
var microtime = require( 'microtime' ); |
|
|
|
function service( backend, cmd, cb ){ |
|
// query new backend |
|
var startTime = microtime.nowDouble(); |
|
backend().client.suggest( cmd, function( err, data ){ |
|
peliasLogger.verbose( 'time elasticsearch query took:', microtime.nowDouble() - startTime ); |
|
// handle backend errors |
|
if( err ){ return cb( err ); } |
|
|
|
// map returned documents |
|
|
|
var docs = []; |
|
var unique_ids = []; |
|
var num_keys = Object.keys(data).length; |
|
var has_docs = function(obj) { |
|
return Array.isArray( obj ) && obj.length && obj[0].options && obj[0].options.length; |
|
}; |
|
for (var i=0, j=0; i<num_keys && j<num_keys; i++) { |
|
if ( has_docs(data[i]) ){ |
|
docs[i] = docs[i] || []; |
|
var res = data[i][0].options[0]; |
|
if (unique_ids.indexOf(res.text) === -1) { |
|
docs[i].push(res); |
|
unique_ids.push(res.text); |
|
} |
|
data[i][0].options.splice(0,1); |
|
} else { |
|
j++; |
|
} |
|
i = i === num_keys-1 ? 1 : i; |
|
} |
|
|
|
// fire callback |
|
return cb( null, docs); |
|
}); |
|
|
|
} |
|
|
|
module.exports = service;
|
|
|