diff --git a/examples/all_the_things.js b/examples/all_the_things.js index 876f757..cb7e928 100644 --- a/examples/all_the_things.js +++ b/examples/all_the_things.js @@ -27,7 +27,8 @@ q.score( query.view.phrase ) .score( query.view.focus( query.view.phrase ) ); // address components -q.score( query.view.address('housenumber') ) +q.score( query.view.address('unit') ) + .score( query.view.address('housenumber') ) .score( query.view.address('street') ) .score( query.view.address('postcode') ); diff --git a/layout/AddressesUsingIdsQuery.js b/layout/AddressesUsingIdsQuery.js index 9bc267b..fed2c6f 100644 --- a/layout/AddressesUsingIdsQuery.js +++ b/layout/AddressesUsingIdsQuery.js @@ -8,6 +8,11 @@ function createAddressShould(vs) { bool: { _name: 'fallback.address', must: [ + { + match_phrase: { + 'address_parts.unit': vs.var('input:unit') + } + }, { match_phrase: { 'address_parts.number': vs.var('input:housenumber') diff --git a/layout/FallbackQuery.js b/layout/FallbackQuery.js index 688730b..25bef38 100644 --- a/layout/FallbackQuery.js +++ b/layout/FallbackQuery.js @@ -224,6 +224,52 @@ function addQuery(vs) { } +function addUnitAndHouseNumberAndStreet(vs) { + var o = { + bool: { + _name: 'fallback.address', + must: [ + { + match_phrase: { + 'address_parts.unit': vs.var('input:unit').toString() + } + }, + { + match_phrase: { + 'address_parts.number': vs.var('input:housenumber').toString() + } + }, + { + match_phrase: { + 'address_parts.street': vs.var('input:street').toString() + } + } + ], + should: [], + filter: { + term: { + layer: 'address' + } + } + } + }; + + if (vs.isset('boost:address')) { + o.bool.boost = vs.var('boost:address'); + } + + addSecPostCode(vs, o); + addSecNeighbourhood(vs, o); + addSecBorough(vs, o); + addSecLocality(vs, o); + addSecCounty(vs, o); + addSecRegion(vs, o); + addSecCountry(vs, o); + + return o; + +} + function addHouseNumberAndStreet(vs) { var o = { bool: { @@ -496,7 +542,10 @@ Layout.prototype.render = function( vs ){ if (vs.isset('input:query')) { funcScoreShould.push(addQuery(vs)); } - if (vs.isset('input:housenumber') && vs.isset('input:street')) { + if (vs.isset('input:unit') && vs.isset('input:housenumber') && vs.isset('input:street')) { + funcScoreShould.push(addUnitAndHouseNumberAndStreet(vs)); + } + else if (vs.isset('input:housenumber') && vs.isset('input:street')) { funcScoreShould.push(addHouseNumberAndStreet(vs)); } if (vs.isset('input:postcode')) { diff --git a/layout/StructuredFallbackQuery.js b/layout/StructuredFallbackQuery.js index 2263189..e9d2fcc 100644 --- a/layout/StructuredFallbackQuery.js +++ b/layout/StructuredFallbackQuery.js @@ -185,6 +185,52 @@ function addQuery(vs) { } +function addUnitAndHouseNumberAndStreet(vs) { + var o = { + bool: { + _name: 'fallback.address', + must: [ + { + match_phrase: { + 'address_parts.unit': vs.var('input:unit').toString() + } + }, + { + match_phrase: { + 'address_parts.number': vs.var('input:housenumber').toString() + } + }, + { + match_phrase: { + 'address_parts.street': vs.var('input:street').toString() + } + } + ], + should: [], + filter: { + term: { + layer: 'address' + } + } + } + }; + + if (vs.isset('boost:address')) { + o.bool.boost = vs.var('boost:address'); + } + + addSecPostCode(vs, o); + addSecNeighbourhood(vs, o); + addSecBorough(vs, o); + addSecLocality(vs, o); + addSecCounty(vs, o); + addSecRegion(vs, o); + addSecCountry(vs, o); + + return o; + +} + function addHouseNumberAndStreet(vs) { var o = { bool: { @@ -470,7 +516,9 @@ Layout.prototype.render = function( vs ){ funcScoreShould.push(addQuery(vs)); } if (vs.isset('input:street')) { - if (vs.isset('input:housenumber')) { + if (vs.isset('input:unit') && vs.isset('input:housenumber')) { + funcScoreShould.push(addUnitAndHouseNumberAndStreet(vs)); + } else if (vs.isset('input:housenumber')) { funcScoreShould.push(addHouseNumberAndStreet(vs)); } funcScoreShould.push(addStreet(vs)); diff --git a/test/fixtures/addressesUsingIdsQuery/no_layers.json b/test/fixtures/addressesUsingIdsQuery/no_layers.json index 8829256..46ee54b 100644 --- a/test/fixtures/addressesUsingIdsQuery/no_layers.json +++ b/test/fixtures/addressesUsingIdsQuery/no_layers.json @@ -26,6 +26,11 @@ "bool": { "_name": "fallback.address", "must": [ + { + "match_phrase": { + "address_parts.unit": "unit value" + } + }, { "match_phrase": { "address_parts.number": "housenumber value" diff --git a/test/fixtures/addressesUsingIdsQuery/no_layers_with_boosts.json b/test/fixtures/addressesUsingIdsQuery/no_layers_with_boosts.json index 8e8ab91..715ce9d 100644 --- a/test/fixtures/addressesUsingIdsQuery/no_layers_with_boosts.json +++ b/test/fixtures/addressesUsingIdsQuery/no_layers_with_boosts.json @@ -28,6 +28,11 @@ "_name": "fallback.address", "boost": 17, "must": [ + { + "match_phrase": { + "address_parts.unit": "unit value" + } + }, { "match_phrase": { "address_parts.number": "housenumber value" diff --git a/test/fixtures/addressesUsingIdsQuery/with_filters.json b/test/fixtures/addressesUsingIdsQuery/with_filters.json index 0d85700..568f2c9 100644 --- a/test/fixtures/addressesUsingIdsQuery/with_filters.json +++ b/test/fixtures/addressesUsingIdsQuery/with_filters.json @@ -26,6 +26,11 @@ "bool": { "_name": "fallback.address", "must": [ + { + "match_phrase": { + "address_parts.unit": "unit value" + } + }, { "match_phrase": { "address_parts.number": "housenumber value" diff --git a/test/fixtures/addressesUsingIdsQuery/with_layers.json b/test/fixtures/addressesUsingIdsQuery/with_layers.json index 3a8245a..d119cfa 100644 --- a/test/fixtures/addressesUsingIdsQuery/with_layers.json +++ b/test/fixtures/addressesUsingIdsQuery/with_layers.json @@ -26,6 +26,11 @@ "bool": { "_name": "fallback.address", "must": [ + { + "match_phrase": { + "address_parts.unit": "unit value" + } + }, { "match_phrase": { "address_parts.number": "housenumber value" diff --git a/test/fixtures/addressesUsingIdsQuery/with_layers_and_filters.json b/test/fixtures/addressesUsingIdsQuery/with_layers_and_filters.json index 90cb909..e6a2f31 100644 --- a/test/fixtures/addressesUsingIdsQuery/with_layers_and_filters.json +++ b/test/fixtures/addressesUsingIdsQuery/with_layers_and_filters.json @@ -26,6 +26,11 @@ "bool": { "_name": "fallback.address", "must": [ + { + "match_phrase": { + "address_parts.unit": "unit value" + } + }, { "match_phrase": { "address_parts.number": "housenumber value" diff --git a/test/fixtures/addressesUsingIdsQuery/with_scores.json b/test/fixtures/addressesUsingIdsQuery/with_scores.json index 368c996..261d339 100644 --- a/test/fixtures/addressesUsingIdsQuery/with_scores.json +++ b/test/fixtures/addressesUsingIdsQuery/with_scores.json @@ -26,6 +26,11 @@ "bool": { "_name": "fallback.address", "must": [ + { + "match_phrase": { + "address_parts.unit": "unit value" + } + }, { "match_phrase": { "address_parts.number": "housenumber value" diff --git a/test/fixtures/fallbackQuery1.json b/test/fixtures/fallbackQuery1.json index 85965ad..3aeada4 100644 --- a/test/fixtures/fallbackQuery1.json +++ b/test/fixtures/fallbackQuery1.json @@ -99,6 +99,11 @@ "_name": "fallback.address", "boost": { "$": 19 }, "must": [ + { + "match_phrase": { + "address_parts.unit": "unit value" + } + }, { "match_phrase": { "address_parts.number": "house number value" diff --git a/test/fixtures/structuredFallbackQuery/address.json b/test/fixtures/structuredFallbackQuery/address.json index a4ce139..5db19b7 100644 --- a/test/fixtures/structuredFallbackQuery/address.json +++ b/test/fixtures/structuredFallbackQuery/address.json @@ -10,6 +10,11 @@ "_name": "fallback.address", "boost": { "$": 19 }, "must": [ + { + "match_phrase": { + "address_parts.unit": "unit value" + } + }, { "match_phrase": { "address_parts.number": "house number value" diff --git a/test/layout/AddressesUsingIdsQuery.js b/test/layout/AddressesUsingIdsQuery.js index 4d51ce4..bf3839f 100644 --- a/test/layout/AddressesUsingIdsQuery.js +++ b/test/layout/AddressesUsingIdsQuery.js @@ -11,6 +11,7 @@ module.exports.tests.base_render = (test, common) => { const vs = new VariableStore(); vs.var('size', 'size value'); vs.var('track_scores', 'track_scores value'); + vs.var('input:unit', 'unit value'); vs.var('input:housenumber', 'housenumber value'); vs.var('input:street', 'street value'); @@ -32,6 +33,7 @@ module.exports.tests.base_render = (test, common) => { const vs = new VariableStore(); vs.var('size', 'size value'); vs.var('track_scores', 'track_scores value'); + vs.var('input:unit', 'unit value'); vs.var('input:housenumber', 'housenumber value'); vs.var('input:street', 'street value'); vs.var('boost:address', 17); @@ -75,6 +77,7 @@ module.exports.tests.base_render = (test, common) => { const vs = new VariableStore(); vs.var('size', 'size value'); vs.var('track_scores', 'track_scores value'); + vs.var('input:unit', 'unit value'); vs.var('input:housenumber', 'housenumber value'); vs.var('input:street', 'street value'); vs.var('input:layers', { @@ -120,6 +123,7 @@ module.exports.tests.render_with_scores = (test, common) => { const vs = new VariableStore(); vs.var('size', 'size value'); vs.var('track_scores', 'track_scores value'); + vs.var('input:unit', 'unit value'); vs.var('input:housenumber', 'housenumber value'); vs.var('input:street', 'street value'); @@ -159,6 +163,7 @@ module.exports.tests.render_with_filters = (test, common) => { const vs = new VariableStore(); vs.var('size', 'size value'); vs.var('track_scores', 'track_scores value'); + vs.var('input:unit', 'unit value'); vs.var('input:housenumber', 'housenumber value'); vs.var('input:street', 'street value'); @@ -187,6 +192,7 @@ module.exports.tests.render_with_filters = (test, common) => { const vs = new VariableStore(); vs.var('size', 'size value'); vs.var('track_scores', 'track_scores value'); + vs.var('input:unit', 'unit value'); vs.var('input:housenumber', 'housenumber value'); vs.var('input:street', 'street value'); vs.var('input:layers', { diff --git a/test/layout/FallbackQuery.js b/test/layout/FallbackQuery.js index d97c315..ce970c8 100644 --- a/test/layout/FallbackQuery.js +++ b/test/layout/FallbackQuery.js @@ -43,6 +43,7 @@ module.exports.tests.base_render = function(test, common) { vs.var('size', 'size value'); vs.var('track_scores', 'track_scores value'); vs.var('input:query', 'query value'); + vs.var('input:unit', 'unit value'); vs.var('input:housenumber', 'house number value'); vs.var('input:street', 'street value'); vs.var('input:neighbourhood', 'neighbourhood value'); diff --git a/test/layout/StructuredFallbackQuery.js b/test/layout/StructuredFallbackQuery.js index 2ed4e39..6c9646b 100644 --- a/test/layout/StructuredFallbackQuery.js +++ b/test/layout/StructuredFallbackQuery.js @@ -42,6 +42,7 @@ module.exports.tests.base_render = function(test, common) { var vs = new VariableStore(); vs.var('size', 'size value'); vs.var('track_scores', 'track_scores value'); + vs.var('input:unit', 'unit value'); vs.var('input:housenumber', 'house number value'); vs.var('input:street', 'street value'); vs.var('input:neighbourhood', 'neighbourhood value');