From c3451bbec0a8931d9d687c05cbd3a14c946444d2 Mon Sep 17 00:00:00 2001 From: Stephen Hess Date: Tue, 25 Oct 2016 12:13:09 -0400 Subject: [PATCH] added city input/results support just uses the original scoring, which is open to debate --- middleware/confidenceScoreFallback.js | 11 +-- .../middleware/confidenceScoreFallback.js | 71 +++++++++++++++++++ 2 files changed, 78 insertions(+), 4 deletions(-) diff --git a/middleware/confidenceScoreFallback.js b/middleware/confidenceScoreFallback.js index 8593ed60..d10d3ade 100644 --- a/middleware/confidenceScoreFallback.js +++ b/middleware/confidenceScoreFallback.js @@ -89,6 +89,7 @@ function checkFallbackLevel(req, hit) { default: return 0.1; } + } hit.match_type = 'exact'; @@ -96,11 +97,9 @@ function checkFallbackLevel(req, hit) { } function checkFallbackOccurred(req, hit) { - // at this time we only do this for address queries, so keep this simple - // TODO: add other layer checks once we start handling disambiguation - return (requestedAddress(req) && hit.layer !== 'address') || - (requestedStreet(req) && hit.layer !== 'street'); + (requestedStreet(req) && hit.layer !== 'street') || + (requestedCity(req) && hit.layer !== 'locality'); } function requestedAddress(req) { @@ -115,4 +114,8 @@ function requestedStreet(req) { req.clean.parsed_text.hasOwnProperty('street'); } +function requestedCity(req) { + return req.clean.parsed_text.hasOwnProperty('city'); +} + module.exports = setup; diff --git a/test/unit/middleware/confidenceScoreFallback.js b/test/unit/middleware/confidenceScoreFallback.js index 5fcd03de..1adf77da 100644 --- a/test/unit/middleware/confidenceScoreFallback.js +++ b/test/unit/middleware/confidenceScoreFallback.js @@ -237,6 +237,77 @@ module.exports.tests.confidenceScore = function(test, common) { t.equal(res.data[0].confidence, 0.1, 'score was set'); t.end(); }); + + test('city input granularity with locality result should set score to 1.0', function(t) { + var req = { + clean: { + parsed_text: { + city: 'city name', + state: 'state name' + } + } + }; + var res = { + data: [{ + layer: 'locality' + }], + meta: { + query_type: 'fallback' + } + }; + + confidenceScore(req, res, function() {}); + t.equal(res.data[0].confidence, 1.0, 'score was set'); + t.end(); + }); + + test('city input granularity with region fallback should set score to 0.3', function(t) { + var req = { + clean: { + parsed_text: { + city: 'city name', + state: 'state name' + } + } + }; + var res = { + data: [{ + layer: 'region' + }], + meta: { + query_type: 'fallback' + } + }; + + confidenceScore(req, res, function() {}); + t.equal(res.data[0].confidence, 0.3, 'score was set'); + t.end(); + }); + + test('city input granularity with country fallback should set score to 0.1', function(t) { + var req = { + clean: { + parsed_text: { + city: 'city name', + state: 'state name', + country: 'country name' + } + } + }; + var res = { + data: [{ + layer: 'country' + }], + meta: { + query_type: 'fallback' + } + }; + + confidenceScore(req, res, function() {}); + t.equal(res.data[0].confidence, 0.1, 'score was set'); + t.end(); + }); + }; module.exports.all = function (tape, common) {