var microtime = require('microtime'); const match = require('../utils/match-util.js'); const memory_usage = require('../utils/mem-usage.js'); const kb = require('../utils/kb-util.js'); const products = require('../data/products.json'); // memory_usage.report(); // test runner function run(query) { var f0 = microtime.nowDouble(); let result; // for(let i = 0 ; i < 20 ; i++) result = matchQuery(query); var f1 = microtime.nowDouble(); memory_usage.report(); return { t: f1-f0, q: query, result: result } } // sample search implementation function matchQuery(query) { var result = []; let q = kb.keyboardize(query); for(let i = 0; i < products.length; i++) { let rate = 0; let found = false; let x; let src = products[i].kb.split(' '); // (array) source of product (key-)words if ((x = match.weighted_exact(q, src)) > 0) { // console.log(products[i].kb, x); rate = 5.0 + x; found = true; } else if ((x = match.weighted_partial(q, src)) > 0) { rate = 3.0 + x; found = true; } else { let similarity = 0; src.forEach( w => { let sim = match.resemblance(q, w, 2); if (sim > 0.6) { found = true; similarity = (sim > similarity) ? sim : similarity; } }); if (found) { rate = 2 * similarity; } } if (found) { products[i].rate = rate; result.push(products[i]); } } return result.sort((a,b) => b.rate - a.rate).slice(0, 48);; } module.exports = { run }