From f6c9768fb863e71d43776e7ff910701f55fc7aa4 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Tue, 17 Mar 2015 13:23:32 +0900 Subject: [PATCH] Work in progress on getting the "compatible" feature working. --- server/package.json | 3 ++- server/search.js | 52 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/server/package.json b/server/package.json index 386a39d..0777725 100644 --- a/server/package.json +++ b/server/package.json @@ -13,6 +13,7 @@ "express": "~4.5.1", "mysql": "^2.5.0", "underscore": "^1.6.0", - "geolib": "~2.0.14" + "geolib": "~2.0.14", + "async": "~0.9.0" } } diff --git a/server/search.js b/server/search.js index 55389a0..1e60d42 100644 --- a/server/search.js +++ b/server/search.js @@ -24,6 +24,7 @@ 'use strict'; var _ = require('underscore'); +var async = require('async'); var geolib = require('geolib'); var mysql = require('mysql'); var pool = null; @@ -160,7 +161,7 @@ function getRecords(context, callback) { }); computeRecordGeo(records, context); - callback(records); + computeRecordCompat(records, context, callback); }); } @@ -189,6 +190,53 @@ function computeRecordGeo(records, context) { }); } +function computeRecordCompat(records, context, callback) { + async.map( + records, + function(record, callback) { + pool.query('SELECT * FROM history WHERE reviewId = (?)', [record.id], function(err, rows) { + if (err) { + throw err; + } + + async.map( + rows, + function(row, callback) { + pool.query( + 'SELECT * FROM historyGroups WHERE historyId = (?)', + [row.id], + function(err, historyGroupRows) { + if (err) { + throw err; + } + + var reviewFeatures = {}; + _.each(historyGroupRows, function(historyGroupRow) { + reviewFeatures[historyGroupRow.categoryId] = historyGroupRow.categoryValue; + }); + + var groupScore = innerProduct(context.profile, reviewFeatures); + callback(err, groupScore); + } + ); + }, + function(err, results) { + if (err) { + throw err; + } + + callback(results); + } + ); + }); + }, + function(err, results) { + console.log(results); + callback(records); + } + ); +} + function sanitizeQuery(query) { var keys = [ 'delicious', @@ -197,6 +245,7 @@ function sanitizeQuery(query) { 'atmospheric', 'nearby', 'accessible' + // 'compatible' ]; var features = {}; @@ -294,6 +343,7 @@ function runQuery(query, callback) { var context = { geo: query.geo, + profile: query.profile, walkingDist: query.walkingDist * 1000.0 };