From fa7238391128d9e23cea4de5e1e0fbc00aba1558 Mon Sep 17 00:00:00 2001 From: Julian Simioni Date: Thu, 28 Apr 2022 12:18:57 -0400 Subject: [PATCH] feat(filter): Check `dependency_a` in `boundary.country` filter --- query/autocomplete.js | 4 ++-- query/autocomplete_defaults.js | 4 ++++ query/search.js | 4 ++-- query/search_defaults.js | 4 ++++ query/search_pelias_parser.js | 4 ++-- query/structured_geocoding.js | 4 ++-- test/unit/fixture/autocomplete_boundary_country.js | 6 +++--- test/unit/fixture/search_boundary_country.js | 10 +++++----- test/unit/fixture/search_boundary_country_multi.js | 10 +++++----- .../fixture/search_pelias_parser_boundary_country.js | 10 +++++----- test/unit/query/structured_geocoding.js | 9 ++++++--- 11 files changed, 40 insertions(+), 29 deletions(-) diff --git a/query/autocomplete.js b/query/autocomplete.js index f7ec02fdf..6e980a75c 100644 --- a/query/autocomplete.js +++ b/query/autocomplete.js @@ -60,7 +60,7 @@ query.filter( peliasQuery.view.sources ); query.filter( peliasQuery.view.layers ); query.filter( peliasQuery.view.boundary_rect ); query.filter( peliasQuery.view.boundary_circle ); -query.filter( peliasQuery.view.boundary_country ); +query.filter( peliasQuery.view.leaf.multi_match('boundary_country') ); query.filter( peliasQuery.view.categories ); query.filter( peliasQuery.view.boundary_gid ); query.filter( views.focus_point_filter ); @@ -88,7 +88,7 @@ function generateQuery( clean ){ // boundary country if( _.isArray(clean['boundary.country']) && !_.isEmpty(clean['boundary.country']) ){ vs.set({ - 'boundary:country': clean['boundary.country'].join(' ') + 'multi_match:boundary_country:input': clean['boundary.country'].join(' ') }); } diff --git a/query/autocomplete_defaults.js b/query/autocomplete_defaults.js index 3c634c891..ca8eca7d7 100644 --- a/query/autocomplete_defaults.js +++ b/query/autocomplete_defaults.js @@ -72,6 +72,10 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'admin:country_a:boost': 1, 'admin:country_a:cutoff_frequency': 0.01, + // these options affect the `boundary.country` hard filter + 'multi_match:boundary_country:analyzer': 'standard', + 'multi_match:boundary_country:fields': ['parent.country_a', 'parent.dependency_a'], + 'admin:country:analyzer': 'peliasAdmin', 'admin:country:field': 'parent.country.ngram', 'admin:country:boost': 1, diff --git a/query/search.js b/query/search.js index 9333a25f6..fd1a048e7 100644 --- a/query/search.js +++ b/query/search.js @@ -15,7 +15,7 @@ fallbackQuery.score( peliasQuery.view.population_only_function ); // -------------------------------- // non-scoring hard filters -fallbackQuery.filter( peliasQuery.view.boundary_country ); +fallbackQuery.filter( peliasQuery.view.leaf.multi_match('boundary_country') ); fallbackQuery.filter( peliasQuery.view.boundary_circle ); fallbackQuery.filter( peliasQuery.view.boundary_rect ); fallbackQuery.filter( peliasQuery.view.sources ); @@ -97,7 +97,7 @@ function generateQuery( clean ){ // boundary country if( _.isArray(clean['boundary.country']) && !_.isEmpty(clean['boundary.country']) ){ vs.set({ - 'boundary:country': clean['boundary.country'].join(' ') + 'multi_match:boundary_country:input': clean['boundary.country'].join(' ') }); } diff --git a/query/search_defaults.js b/query/search_defaults.js index f9d15b202..59955d89b 100644 --- a/query/search_defaults.js +++ b/query/search_defaults.js @@ -66,6 +66,10 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'admin:country_a:boost': 1, 'admin:country_a:cutoff_frequency': 0.01, + // these config variables are used for the 'boundary.country' hard filter + 'multi_match:boundary_country:analyzer': 'standard', + 'multi_match:boundary_country:fields': ['parent.country_a', 'parent.dependency_a'], + 'admin:country:analyzer': 'peliasAdmin', 'admin:country:field': 'parent.country', 'admin:country:boost': 1, diff --git a/query/search_pelias_parser.js b/query/search_pelias_parser.js index 65a836834..ac1037086 100644 --- a/query/search_pelias_parser.js +++ b/query/search_pelias_parser.js @@ -44,7 +44,7 @@ query.filter( peliasQuery.view.boundary_rect ); query.filter( peliasQuery.view.sources ); query.filter( peliasQuery.view.layers ); query.filter( peliasQuery.view.categories ); -query.filter( peliasQuery.view.boundary_country ); +query.filter( peliasQuery.view.leaf.multi_match('boundary_country') ); query.filter( peliasQuery.view.boundary_gid ); // -------------------------------- @@ -123,7 +123,7 @@ function generateQuery( clean ){ // boundary country if( _.isArray(clean['boundary.country']) && !_.isEmpty(clean['boundary.country']) ){ vs.set({ - 'boundary:country': clean['boundary.country'].join(' ') + 'multi_match:boundary_country:input': clean['boundary.country'].join(' ') }); } diff --git a/query/structured_geocoding.js b/query/structured_geocoding.js index 40cb614a0..5ceaab2e2 100644 --- a/query/structured_geocoding.js +++ b/query/structured_geocoding.js @@ -15,7 +15,7 @@ structuredQuery.score( peliasQuery.view.population_only_function ); // -------------------------------- // non-scoring hard filters -structuredQuery.filter( peliasQuery.view.boundary_country ); +structuredQuery.filter( peliasQuery.view.leaf.multi_match('boundary_country') ); structuredQuery.filter( peliasQuery.view.boundary_circle ); structuredQuery.filter( peliasQuery.view.boundary_rect ); structuredQuery.filter( peliasQuery.view.sources ); @@ -87,7 +87,7 @@ function generateQuery( clean ){ // boundary country if( _.isArray(clean['boundary.country']) && !_.isEmpty(clean['boundary.country']) ){ vs.set({ - 'boundary:country': clean['boundary.country'].join(' ') + 'multi_match:boundary_country:input': clean['boundary.country'].join(' ') }); } diff --git a/test/unit/fixture/autocomplete_boundary_country.js b/test/unit/fixture/autocomplete_boundary_country.js index 64a70552c..fc1c916f7 100644 --- a/test/unit/fixture/autocomplete_boundary_country.js +++ b/test/unit/fixture/autocomplete_boundary_country.js @@ -51,12 +51,12 @@ module.exports = { } }], 'filter': [{ - 'match': { - 'parent.country_a.ngram': { + 'multi_match': { + 'type': 'best_fields', + 'fields': ['parent.country_a', 'parent.dependency_a'], 'analyzer': 'standard', 'query': 'ABC' } - } }] } }, diff --git a/test/unit/fixture/search_boundary_country.js b/test/unit/fixture/search_boundary_country.js index 9d166f591..ffd8bc516 100644 --- a/test/unit/fixture/search_boundary_country.js +++ b/test/unit/fixture/search_boundary_country.js @@ -33,11 +33,11 @@ module.exports = { 'bool': { 'must': [ { - 'match': { - 'parent.country_a': { - 'analyzer': 'standard', - 'query': 'ABC' - } + 'multi_match': { + 'type': 'best_fields', + 'fields': ['parent.country_a', 'parent.dependency_a'], + 'analyzer': 'standard', + 'query': 'ABC' } }, { diff --git a/test/unit/fixture/search_boundary_country_multi.js b/test/unit/fixture/search_boundary_country_multi.js index 3db080217..842a94a65 100644 --- a/test/unit/fixture/search_boundary_country_multi.js +++ b/test/unit/fixture/search_boundary_country_multi.js @@ -33,11 +33,11 @@ module.exports = { 'bool': { 'must': [ { - 'match': { - 'parent.country_a': { - 'analyzer': 'standard', - 'query': 'ABC DEF' - } + 'multi_match': { + 'type': 'best_fields', + 'fields': ['parent.country_a', 'parent.dependency_a'], + 'analyzer': 'standard', + 'query': 'ABC DEF' } }, { diff --git a/test/unit/fixture/search_pelias_parser_boundary_country.js b/test/unit/fixture/search_pelias_parser_boundary_country.js index 7e3ecd8f2..422d19e73 100644 --- a/test/unit/fixture/search_pelias_parser_boundary_country.js +++ b/test/unit/fixture/search_pelias_parser_boundary_country.js @@ -65,11 +65,11 @@ module.exports = { } }, { - 'match': { - 'parent.country_a': { - 'analyzer': 'standard', - 'query': 'ABC' - } + 'multi_match': { + 'type': 'best_fields', + 'fields': ['parent.country_a', 'parent.dependency_a'], + 'analyzer': 'standard', + 'query': 'ABC' } } ] diff --git a/test/unit/query/structured_geocoding.js b/test/unit/query/structured_geocoding.js index b18109127..3f68d2852 100644 --- a/test/unit/query/structured_geocoding.js +++ b/test/unit/query/structured_geocoding.js @@ -14,7 +14,10 @@ const views = { sources: 'sources view', layers: 'layers view', categories: 'categories view', - boundary_gid: 'boundary_gid view' + boundary_gid: 'boundary_gid view', + leaf: { + multi_match: () => 'multi_match leaf view' + } }; module.exports.tests = {}; @@ -76,7 +79,7 @@ module.exports.tests.query = (test, common) => { ]); t.deepEquals(query.body.filter_functions, [ - 'boundary_country view', + 'multi_match leaf view', 'boundary_circle view', 'boundary_rect view', 'sources view', @@ -592,7 +595,7 @@ module.exports.tests.boundary_country = (test, common) => { } })(clean); - t.equals(query.body.vs.var('boundary:country').toString(), 'boundary country value'); + t.equals(query.body.vs.var('multi_match:boundary_country:input').toString(), 'boundary country value'); t.end();