diff --git a/helper/type_mapping.js b/helper/type_mapping.js index ed20c0d8..59dbb590 100644 --- a/helper/type_mapping.js +++ b/helper/type_mapping.js @@ -47,7 +47,8 @@ var SOURCE_MAPPING = addStandardTargetsToAliases(SOURCES, SOURCE_ALIASES); var LAYERS_BY_SOURCE = { openstreetmap: [ 'address', 'venue' ], openaddresses: [ 'address' ], - geonames: [ 'country', 'region', 'county', 'locality', 'venue' ], + geonames: [ 'country','macroregion', 'region', 'county','localadmin', + 'locality', 'neighbourhood', 'venue' ], whosonfirst: [ 'continent', 'country', 'dependency', 'macroregion', 'region', 'locality', 'localadmin', 'macrocounty', 'county', 'macrohood', 'borough', 'neighbourhood', 'microhood', 'disputed'] diff --git a/middleware/dedupe.js b/middleware/dedupe.js index 7adb33e2..786675c4 100644 --- a/middleware/dedupe.js +++ b/middleware/dedupe.js @@ -51,7 +51,10 @@ function isDifferent(item1, item2) { if (item1.hasOwnProperty('name') && item2.hasOwnProperty('name')) { for (var lang in item1.name) { - propMatch(item1.name, item2.name, lang); + if(item2.name[lang] || lang === 'default') { + // do not consider absence of an additional name as a difference + propMatch(item1.name, item2.name, lang); + } } } else { diff --git a/package.json b/package.json index 53c7fab0..1099a2cb 100644 --- a/package.json +++ b/package.json @@ -49,10 +49,10 @@ "lodash": "^4.5.0", "markdown": "0.5.0", "morgan": "1.7.0", - "pelias-config": "^1.0.1", + "pelias-config": "~2.0.0", "pelias-logger": "^0.0.8", "pelias-model": "^4.0.0", - "pelias-query": "7.0.1", + "pelias-query": "~8.0.0", "pelias-suggester-pipeline": "2.0.4", "pelias-text-analyzer": "^1.0.1", "stats-lite": "1.0.3", @@ -66,8 +66,10 @@ "nsp": "^2.2.0", "precommit-hook": "^3.0.0", "proxyquire": "^1.7.7", + "source-map": "^0.5.6", "tap-dot": "1.0.5", - "tape": "^4.5.1" + "tape": "^4.5.1", + "uglify-js": "^2.6.2" }, "pre-commit": [ "lint", diff --git a/query/autocomplete_defaults.js b/query/autocomplete_defaults.js index 08e33aeb..2800141b 100644 --- a/query/autocomplete_defaults.js +++ b/query/autocomplete_defaults.js @@ -15,10 +15,8 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'boundary:circle:radius': '50km', 'boundary:circle:distance_type': 'plane', 'boundary:circle:optimize_bbox': 'indexed', - 'boundary:circle:_cache': true, 'boundary:rect:type': 'indexed', - 'boundary:rect:_cache': true, 'ngram:analyzer': 'peliasQueryPartialToken', 'ngram:field': 'name.default', @@ -36,7 +34,7 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'focus:weight': 40, 'function_score:score_mode': 'avg', - 'function_score:boost_mode': 'multiply', + 'function_score:boost_mode': 'replace', 'address:housenumber:analyzer': 'peliasHousenumber', 'address:housenumber:field': 'address_parts.number', diff --git a/query/reverse_defaults.js b/query/reverse_defaults.js index 8392183f..3b468a05 100644 --- a/query/reverse_defaults.js +++ b/query/reverse_defaults.js @@ -16,10 +16,8 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'boundary:circle:radius:coarse': '500km', 'boundary:circle:distance_type': 'plane', 'boundary:circle:optimize_bbox': 'indexed', - 'boundary:circle:_cache': true, 'boundary:rect:type': 'indexed', - 'boundary:rect:_cache': true, 'ngram:analyzer': 'peliasQueryPartialToken', 'ngram:field': 'name.default', @@ -31,7 +29,7 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'phrase:slop': 2, 'focus:function': 'linear', - 'focus:offset': '1km', + 'focus:offset': '0km', 'focus:scale': '50km', 'focus:decay': 0.5, 'focus:weight': 2, diff --git a/query/search_defaults.js b/query/search_defaults.js index 0ffdd79f..4e6a7ffb 100644 --- a/query/search_defaults.js +++ b/query/search_defaults.js @@ -15,12 +15,10 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'boundary:circle:radius': '50km', 'boundary:circle:distance_type': 'plane', 'boundary:circle:optimize_bbox': 'indexed', - 'boundary:circle:_cache': true, 'boundary:rect:type': 'indexed', - 'boundary:rect:_cache': true, - 'ngram:analyzer': 'peliasIndexOneEdgeGram', + 'ngram:analyzer': 'peliasQueryFullToken', 'ngram:field': 'name.default', 'ngram:boost': 1, @@ -30,7 +28,7 @@ module.exports = _.merge({}, peliasQuery.defaults, { 'phrase:slop': 2, 'focus:function': 'linear', - 'focus:offset': '1km', + 'focus:offset': '0km', 'focus:scale': '50km', 'focus:decay': 0.5, 'focus:weight': 2, diff --git a/query/view/focus_selected_layers.js b/query/view/focus_selected_layers.js index ba19919f..9d23998c 100644 --- a/query/view/focus_selected_layers.js +++ b/query/view/focus_selected_layers.js @@ -14,6 +14,12 @@ var peliasQuery = require('pelias-query'); module.exports = function( subview ){ return function( vs ){ + // don't perform this query on single character inputs + // as its too unperformant to sort a large part of the index. + if( vs.var('input:name').get().length < 2 ){ + return null; + } + if( !subview ){ return null; } // subview validation failed var macroView = peliasQuery.view.focus( subview ); if( !macroView ){ return null; } // macroView validation failed diff --git a/query/view/ngrams_last_token_only.js b/query/view/ngrams_last_token_only.js index 2665c294..12be4584 100644 --- a/query/view/ngrams_last_token_only.js +++ b/query/view/ngrams_last_token_only.js @@ -28,5 +28,9 @@ module.exports = function( vs ){ vsCopy.var('input:name').set( tokens.join(' ') ); // return the view rendered using the copy - return ngrams_strict( vsCopy ); + return { + 'constant_score': { + 'query': ngrams_strict( vsCopy ) + } + }; }; diff --git a/query/view/ngrams_strict.js b/query/view/ngrams_strict.js index 1f90ebe6..b0d7ae94 100644 --- a/query/view/ngrams_strict.js +++ b/query/view/ngrams_strict.js @@ -10,10 +10,16 @@ var peliasQuery = require('pelias-query'); module.exports = function( vs ){ + // validate required params + if( !vs.isset('phrase:slop') ){ + return null; + } + var view = peliasQuery.view.ngrams( vs ); view.match['name.default'].type = 'phrase'; view.match['name.default'].operator = 'and'; + view.match['name.default'].slop = vs.var('phrase:slop'); return view; }; diff --git a/query/view/pop_subquery.js b/query/view/pop_subquery.js index 724b773f..fc8f6804 100644 --- a/query/view/pop_subquery.js +++ b/query/view/pop_subquery.js @@ -4,14 +4,13 @@ var peliasQuery = require('pelias-query'), /** Population / Popularity subquery -**/ - -module.exports = function( vs ){ - var view = peliasQuery.view.ngrams( vs ); + In prior versions we have had restricted the population/popularity boost + to only a section of the query results. - view.match['name.default'].analyzer = vs.var('phrase:analyzer'); - delete view.match['name.default'].boost; + Currently it is configured to `match_all`, ie. targets all records. +**/ - return view; +module.exports = function( vs ){ + return { 'match_all': {} }; }; diff --git a/sanitiser/_tokenizer.js b/sanitiser/_tokenizer.js index 3312ea05..328cd1aa 100644 --- a/sanitiser/_tokenizer.js +++ b/sanitiser/_tokenizer.js @@ -92,13 +92,7 @@ function sanitize( raw, clean ){ // set all but the last token as 'complete' clean.tokens_complete = tokensCopy; - /** - if the last token is a single non-numeric character then we must discard it. - - at time of writing, single non-numeric ngrams are not stored in the index, - sending them as part of the query would result in 0 documents being returned. - **/ - if( lastToken && ( lastToken.length > 1 || lastToken.match(/[0-9]/) ) ){ + if( lastToken ){ clean.tokens_incomplete = [ lastToken ]; } } diff --git a/test/unit/fixture/autocomplete_linguistic_final_token.js b/test/unit/fixture/autocomplete_linguistic_final_token.js index b4cc33d2..c27e64f5 100644 --- a/test/unit/fixture/autocomplete_linguistic_final_token.js +++ b/test/unit/fixture/autocomplete_linguistic_final_token.js @@ -1,77 +1,63 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'boost': 1, - 'slop': 3, - 'query': 'one', - 'type': 'phrase' - } - } - }], - 'should':[{ - 'match': { - 'phrase.default': { - 'analyzer': 'peliasPhrase', - 'boost': 1, - 'slop': 3, - 'query': 'one', - 'type': 'phrase' - } - } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'one', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'one', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 3 - }] - } + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'analyzer': 'peliasQueryFullToken', + 'boost': 1, + 'slop': 3, + 'query': 'one', + 'type': 'phrase' + } + } + }], + 'should':[{ + 'match': { + 'phrase.default': { + 'analyzer': 'peliasPhrase', + 'boost': 1, + 'slop': 3, + 'query': 'one', + 'type': 'phrase' + } + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 3 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/autocomplete_linguistic_focus.js b/test/unit/fixture/autocomplete_linguistic_focus.js index 430d43c9..07c741d7 100644 --- a/test/unit/fixture/autocomplete_linguistic_focus.js +++ b/test/unit/fixture/autocomplete_linguistic_focus.js @@ -1,111 +1,103 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'constant_score': { + 'query': { 'match': { 'name.default': { 'analyzer': 'peliasQueryPartialToken', 'boost': 100, 'query': 'test', 'type': 'phrase', - 'operator': 'and' + 'operator': 'and', + 'slop': 3 } } - }], - 'should': [{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryPartialToken', - 'boost': 100, - 'query': 'test', - 'type': 'phrase', - 'operator': 'and' - } - } - }, - 'functions': [{ - 'linear': { - 'center_point': { - 'origin': { - 'lat': 29.49136, - 'lon': -82.50622 - }, - 'offset': '0km', - 'scale': '250km', - 'decay': 0.5 - } - }, - 'weight': 40 - }], - 'score_mode': 'avg', - 'boost_mode': 'multiply', - 'filter': { - 'or': [ - { - 'term': { - 'layer': 'venue' - } - }, - { - 'term': { - 'layer': 'address' - } - } - ] + } + } + }], + 'should': [{ + 'function_score': { + 'query': { + 'match': { + 'name.default': { + 'analyzer': 'peliasQueryPartialToken', + 'boost': 100, + 'query': 'test', + 'type': 'phrase', + 'operator': 'and', + 'slop': 3 } } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'test', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 + }, + 'functions': [{ + 'linear': { + 'center_point': { + 'origin': { + 'lat': 29.49136, + 'lon': -82.50622 }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'test', - } + 'offset': '0km', + 'scale': '250km', + 'decay': 0.5 + } + }, + 'weight': 40 + }], + 'score_mode': 'avg', + 'boost_mode': 'replace', + 'filter': { + 'or': [ + { + 'term': { + 'layer': 'venue' } }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 3 - }] - } + { + 'term': { + 'layer': 'address' + } + } + ] + } + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 3 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/autocomplete_linguistic_focus_null_island.js b/test/unit/fixture/autocomplete_linguistic_focus_null_island.js index 9a4afc05..b0761f40 100644 --- a/test/unit/fixture/autocomplete_linguistic_focus_null_island.js +++ b/test/unit/fixture/autocomplete_linguistic_focus_null_island.js @@ -1,111 +1,103 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'constant_score': { + 'query': { 'match': { 'name.default': { 'analyzer': 'peliasQueryPartialToken', 'boost': 100, 'query': 'test', 'type': 'phrase', - 'operator': 'and' + 'operator': 'and', + 'slop': 3 } } - }], - 'should': [{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryPartialToken', - 'boost': 100, - 'query': 'test', - 'type': 'phrase', - 'operator': 'and' - } - } - }, - 'functions': [{ - 'linear': { - 'center_point': { - 'origin': { - 'lat': 0, - 'lon': 0 - }, - 'offset': '0km', - 'scale': '250km', - 'decay': 0.5 - } - }, - 'weight': 40 - }], - 'score_mode': 'avg', - 'boost_mode': 'multiply', - 'filter': { - 'or': [ - { - 'term': { - 'layer': 'venue' - } - }, - { - 'term': { - 'layer': 'address' - } - } - ] + } + } + }], + 'should': [{ + 'function_score': { + 'query': { + 'match': { + 'name.default': { + 'analyzer': 'peliasQueryPartialToken', + 'boost': 100, + 'query': 'test', + 'type': 'phrase', + 'operator': 'and', + 'slop': 3 } } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'test', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 + }, + 'functions': [{ + 'linear': { + 'center_point': { + 'origin': { + 'lat': 0, + 'lon': 0 }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'test', - } + 'offset': '0km', + 'scale': '250km', + 'decay': 0.5 + } + }, + 'weight': 40 + }], + 'score_mode': 'avg', + 'boost_mode': 'replace', + 'filter': { + 'or': [ + { + 'term': { + 'layer': 'venue' } }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 3 - }] - } + { + 'term': { + 'layer': 'address' + } + } + ] + } + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 3 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/autocomplete_linguistic_multiple_tokens.js b/test/unit/fixture/autocomplete_linguistic_multiple_tokens.js index d0465b04..07a06d88 100644 --- a/test/unit/fixture/autocomplete_linguistic_multiple_tokens.js +++ b/test/unit/fixture/autocomplete_linguistic_multiple_tokens.js @@ -1,90 +1,81 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'type': 'phrase', - 'boost': 1, - 'slop': 3, - 'query': 'one two' - } - } - }, - { + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'analyzer': 'peliasQueryFullToken', + 'type': 'phrase', + 'boost': 1, + 'slop': 3, + 'query': 'one two' + } + } + }, + { + 'constant_score': { + 'query': { 'match': { 'name.default': { 'analyzer': 'peliasQueryPartialToken', 'boost': 100, 'query': 'three', 'type': 'phrase', - 'operator': 'and' + 'operator': 'and', + 'slop': 3 } } - }], - 'should':[ - { - 'match': { - 'phrase.default': { - 'analyzer' : 'peliasPhrase', - 'type' : 'phrase', - 'boost' : 1, - 'slop' : 3, - 'query' : 'one two' - } - } - }, - { - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'one two three', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'one two three', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 3 - }] + } + } + }], + 'should':[ + { + 'match': { + 'phrase.default': { + 'analyzer' : 'peliasPhrase', + 'type' : 'phrase', + 'boost' : 1, + 'slop' : 3, + 'query' : 'one two' } + } + }, + { + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 3 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/autocomplete_linguistic_only.js b/test/unit/fixture/autocomplete_linguistic_only.js index 4360f4d7..88a7d013 100644 --- a/test/unit/fixture/autocomplete_linguistic_only.js +++ b/test/unit/fixture/autocomplete_linguistic_only.js @@ -1,67 +1,58 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'constant_score': { + 'query': { 'match': { 'name.default': { 'analyzer': 'peliasQueryPartialToken', 'boost': 100, 'query': 'test', 'type': 'phrase', - 'operator': 'and' + 'operator': 'and', + 'slop': 3 } } - }], - 'should':[{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'test', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'test', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 3 - }] - } + } + } + }], + 'should':[{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 3 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/autocomplete_linguistic_with_admin.js b/test/unit/fixture/autocomplete_linguistic_with_admin.js index 7cb51eea..2fcd25ca 100644 --- a/test/unit/fixture/autocomplete_linguistic_with_admin.js +++ b/test/unit/fixture/autocomplete_linguistic_with_admin.js @@ -1,159 +1,145 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [ - { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'type': 'phrase', - 'boost': 1, - 'slop': 3, - 'query': 'one two' - } - } + 'bool': { + 'must': [ + { + 'match': { + 'name.default': { + 'analyzer': 'peliasQueryFullToken', + 'type': 'phrase', + 'boost': 1, + 'slop': 3, + 'query': 'one two' } - ], - 'should': [ - { - 'match': { - 'parent.country': { - 'analyzer': 'peliasAdmin', - 'boost': 800, - 'query': 'three' - } - } - }, - { - 'match': { - 'parent.region': { - 'analyzer': 'peliasAdmin', - 'boost': 600, - 'query': 'three' - } - } - }, - { - 'match': { - 'parent.region_a': { - 'analyzer': 'peliasAdmin', - 'boost': 600, - 'query': 'three' - } - } - }, - { - 'match': { - 'parent.county': { - 'analyzer': 'peliasAdmin', - 'boost': 400, - 'query': 'three' - } - } - }, - { - 'match': { - 'parent.borough': { - 'analyzer': 'peliasAdmin', - 'boost': 600, - 'query': 'three' - } - } - }, - { - 'match': { - 'parent.localadmin': { - 'analyzer': 'peliasAdmin', - 'boost': 200, - 'query': 'three' - } - } - }, - { - 'match': { - 'parent.locality': { - 'analyzer': 'peliasAdmin', - 'boost': 200, - 'query': 'three' - } - } - }, - { - 'match': { - 'parent.neighbourhood': { - 'analyzer': 'peliasAdmin', - 'boost': 200, - 'query': 'three' - } - } - }, - { - 'match': { - 'phrase.default': { - 'analyzer' : 'peliasPhrase', - 'type' : 'phrase', - 'boost' : 1, - 'slop' : 3, - 'query' : 'one two' - } - } + } + } + ], + 'should': [ + { + 'match': { + 'parent.country': { + 'analyzer': 'peliasAdmin', + 'boost': 800, + 'query': 'three' + } + } + }, + { + 'match': { + 'parent.region': { + 'analyzer': 'peliasAdmin', + 'boost': 600, + 'query': 'three' + } + } + }, + { + 'match': { + 'parent.region_a': { + 'analyzer': 'peliasAdmin', + 'boost': 600, + 'query': 'three' + } + } + }, + { + 'match': { + 'parent.county': { + 'analyzer': 'peliasAdmin', + 'boost': 400, + 'query': 'three' + } + } + }, + { + 'match': { + 'parent.borough': { + 'analyzer': 'peliasAdmin', + 'boost': 600, + 'query': 'three' + } + } + }, + { + 'match': { + 'parent.localadmin': { + 'analyzer': 'peliasAdmin', + 'boost': 200, + 'query': 'three' + } + } + }, + { + 'match': { + 'parent.locality': { + 'analyzer': 'peliasAdmin', + 'boost': 200, + 'query': 'three' + } + } + }, + { + 'match': { + 'parent.neighbourhood': { + 'analyzer': 'peliasAdmin', + 'boost': 200, + 'query': 'three' + } + } + }, + { + 'match': { + 'phrase.default': { + 'analyzer' : 'peliasPhrase', + 'type' : 'phrase', + 'boost' : 1, + 'slop' : 3, + 'query' : 'one two' + } + } + }, + { + 'function_score': { + 'query': { + 'match_all': {} }, - { - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'one two', - } - } + 'max_boost': 20, + 'functions': [ + { + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 }, - 'max_boost': 20, - 'functions': [ - { - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - } - ], - 'score_mode': 'first', - 'boost_mode': 'replace' + 'weight': 1 } + ], + 'score_mode': 'first', + 'boost_mode': 'replace' + } + }, + { + 'function_score': { + 'query': { + 'match_all': {} }, - { - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'one two', - } - } + 'max_boost': 20, + 'functions': [ + { + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 }, - 'max_boost': 20, - 'functions': [ - { - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 3 - } - ], - 'score_mode': 'first', - 'boost_mode': 'replace' + 'weight': 3 } - } - ] + ], + 'score_mode': 'first', + 'boost_mode': 'replace' + } } - } + ] } }, 'size': 20, diff --git a/test/unit/fixture/autocomplete_single_character_street.js b/test/unit/fixture/autocomplete_single_character_street.js index f89e8493..356ef884 100644 --- a/test/unit/fixture/autocomplete_single_character_street.js +++ b/test/unit/fixture/autocomplete_single_character_street.js @@ -1,152 +1,138 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'type': 'phrase', - 'boost': 1, - 'slop': 3, - 'query': 'k road' - } + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'analyzer': 'peliasQueryFullToken', + 'type': 'phrase', + 'boost': 1, + 'slop': 3, + 'query': 'k road' + } + } + }], + 'should':[ + { + 'match': { + 'address_parts.street': { + 'query': 'k road', + 'boost': 5, + 'analyzer': 'peliasStreet' } - }], - 'should':[ - { - 'match': { - 'address_parts.street': { - 'query': 'k road', - 'boost': 5, - 'analyzer': 'peliasStreet' - } - } - }, { - 'match': { - 'parent.country': { - 'query': 'laird', - 'boost': 800, - 'analyzer': 'peliasAdmin' - } - } - }, { - 'match': { - 'parent.region': { - 'query': 'laird', - 'boost': 600, - 'analyzer': 'peliasAdmin' - } - } - }, { - 'match': { - 'parent.region_a': { - 'query': 'laird', - 'boost': 600, - 'analyzer': 'peliasAdmin' - } - } - }, { - 'match': { - 'parent.county': { - 'query': 'laird', - 'boost': 400, - 'analyzer': 'peliasAdmin' - } - } - }, { - 'match': { - 'parent.borough': { - 'analyzer': 'peliasAdmin', - 'boost': 600, - 'query': 'laird' - } - } - }, { - 'match': { - 'parent.localadmin': { - 'query': 'laird', - 'boost': 200, - 'analyzer': 'peliasAdmin' - } - } - }, { - 'match': { - 'parent.locality': { - 'query': 'laird', - 'boost': 200, - 'analyzer': 'peliasAdmin' - } - } - }, { - 'match': { - 'parent.neighbourhood': { - 'query': 'laird', - 'boost': 200, - 'analyzer': 'peliasAdmin' - } - } - }, - { - 'match': { - 'phrase.default': { - 'analyzer' : 'peliasPhrase', - 'type' : 'phrase', - 'boost' : 1, - 'slop' : 3, - 'query' : 'k road' - } - } - }, - { - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'k road', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] + } + }, { + 'match': { + 'parent.country': { + 'query': 'laird', + 'boost': 800, + 'analyzer': 'peliasAdmin' + } + } + }, { + 'match': { + 'parent.region': { + 'query': 'laird', + 'boost': 600, + 'analyzer': 'peliasAdmin' + } + } + }, { + 'match': { + 'parent.region_a': { + 'query': 'laird', + 'boost': 600, + 'analyzer': 'peliasAdmin' + } + } + }, { + 'match': { + 'parent.county': { + 'query': 'laird', + 'boost': 400, + 'analyzer': 'peliasAdmin' + } + } + }, { + 'match': { + 'parent.borough': { + 'analyzer': 'peliasAdmin', + 'boost': 600, + 'query': 'laird' } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'k road', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 3 - }] + } + }, { + 'match': { + 'parent.localadmin': { + 'query': 'laird', + 'boost': 200, + 'analyzer': 'peliasAdmin' } + } + }, { + 'match': { + 'parent.locality': { + 'query': 'laird', + 'boost': 200, + 'analyzer': 'peliasAdmin' + } + } + }, { + 'match': { + 'parent.neighbourhood': { + 'query': 'laird', + 'boost': 200, + 'analyzer': 'peliasAdmin' + } + } + }, + { + 'match': { + 'phrase.default': { + 'analyzer' : 'peliasPhrase', + 'type' : 'phrase', + 'boost' : 1, + 'slop' : 3, + 'query' : 'k road' + } + } + }, + { + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 3 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/autocomplete_with_source_filtering.js b/test/unit/fixture/autocomplete_with_source_filtering.js index 075eb6d4..cebd7eea 100644 --- a/test/unit/fixture/autocomplete_with_source_filtering.js +++ b/test/unit/fixture/autocomplete_with_source_filtering.js @@ -1,76 +1,63 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'constant_score': { + 'query': { 'match': { 'name.default': { 'analyzer': 'peliasQueryPartialToken', 'boost': 100, 'query': 'test', 'type': 'phrase', - 'operator': 'and' + 'operator': 'and', + 'slop': 3 } } - }], - 'should':[{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'test', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'name.default': { - 'analyzer': 'peliasQueryFullToken', - 'query': 'test', - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 3 - }] - } + } + } + }], + 'should':[{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 }] } - }, - 'filter': { - 'bool': { - 'must': [{ - 'terms': { - 'source': ['test_source'] - } + },{ + 'function_score': { + 'query': { + 'match_all': {} + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 3 }] } - } + }], + 'filter': [{ + 'terms': { + 'source': ['test_source'] + } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/dedupe_elasticsearch_results.js b/test/unit/fixture/dedupe_elasticsearch_results.js index 59da3746..e4780097 100644 --- a/test/unit/fixture/dedupe_elasticsearch_results.js +++ b/test/unit/fixture/dedupe_elasticsearch_results.js @@ -80,6 +80,34 @@ module.exports = [ '_score': 1.2367082, 'confidence': 0.879 }, + { // same as #1, but with an additional name + 'center_point': { + 'lon': -76.207456, + 'lat': 40.039265 + }, + 'address_parts': {}, + 'parent': { + 'localadmin': ['East Lampeter'], + 'region_a': ['PA'], + 'region': ['Pennsylvania'], + 'locality': ['Smoketown'], + 'country_a': ['USA'], + 'county': ['Lancaster County'], + 'country': ['United States'], + 'neighbourhood': ['Greenland'] + }, + 'name': { + 'default': 'East Lampeter High School', + 'alt': 'High School of East Lampeter', + }, + 'category': [ + 'education' + ], + '_id': '357321757', + '_type': 'venue', + '_score': 1.2367082, + 'confidence': 0.879 + }, { 'center_point': { 'lon': -76.207456, diff --git a/test/unit/fixture/reverse_boundary_circle.js b/test/unit/fixture/reverse_boundary_circle.js index 897f019f..4fc728a2 100644 --- a/test/unit/fixture/reverse_boundary_circle.js +++ b/test/unit/fixture/reverse_boundary_circle.js @@ -14,7 +14,6 @@ module.exports = { 'distance': vs.distance, 'distance_type': 'plane', 'optimize_bbox': 'indexed', - '_cache': true, 'center_point': { 'lat': 29.49136, 'lon': -82.50622 @@ -41,4 +40,4 @@ module.exports = { ], 'size': vs.size, 'track_scores': true -}; \ No newline at end of file +}; diff --git a/test/unit/fixture/reverse_null_island.js b/test/unit/fixture/reverse_null_island.js index 5f020ad2..df6972ca 100644 --- a/test/unit/fixture/reverse_null_island.js +++ b/test/unit/fixture/reverse_null_island.js @@ -2,30 +2,18 @@ var vs = require('../../../query/reverse_defaults'); module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [] + 'bool': { + 'filter': [{ + 'geo_distance': { + 'distance': '500km', + 'distance_type': 'plane', + 'optimize_bbox': 'indexed', + 'center_point': { + 'lat': 0, + 'lon': 0 + } } - }, - 'filter': { - 'bool': { - 'must': [ - { - 'geo_distance': { - 'distance': '500km', - 'distance_type': 'plane', - 'optimize_bbox': 'indexed', - '_cache': true, - 'center_point': { - 'lat': 0, - 'lon': 0 - } - } - } - ] - } - } + }] } }, 'sort': [ diff --git a/test/unit/fixture/reverse_standard.js b/test/unit/fixture/reverse_standard.js index d0b0b734..b70fe958 100644 --- a/test/unit/fixture/reverse_standard.js +++ b/test/unit/fixture/reverse_standard.js @@ -2,30 +2,18 @@ var vs = require('../../../query/reverse_defaults'); module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [] + 'bool': { + 'filter': [{ + 'geo_distance': { + 'distance': '500km', + 'distance_type': 'plane', + 'optimize_bbox': 'indexed', + 'center_point': { + 'lat': 29.49136, + 'lon': -82.50622 + } } - }, - 'filter': { - 'bool': { - 'must': [ - { - 'geo_distance': { - 'distance': '500km', - 'distance_type': 'plane', - 'optimize_bbox': 'indexed', - '_cache': true, - 'center_point': { - 'lat': 29.49136, - 'lon': -82.50622 - } - } - } - ] - } - } + }] } }, 'sort': [ diff --git a/test/unit/fixture/reverse_with_boundary_country.js b/test/unit/fixture/reverse_with_boundary_country.js index 789cadaf..c21cb44b 100644 --- a/test/unit/fixture/reverse_with_boundary_country.js +++ b/test/unit/fixture/reverse_with_boundary_country.js @@ -2,39 +2,28 @@ var vs = require('../../../query/reverse_defaults'); module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [ - { - 'match': { - 'parent.country_a': { - 'analyzer': 'standard', - 'query': 'ABC' - } - } + 'bool': { + 'must': [ + { + 'match': { + 'parent.country_a': { + 'analyzer': 'standard', + 'query': 'ABC' } - ] + } } - }, - 'filter': { - 'bool': { - 'must': [ - { - 'geo_distance': { - 'distance': '500km', - 'distance_type': 'plane', - 'optimize_bbox': 'indexed', - '_cache': true, - 'center_point': { - 'lat': 29.49136, - 'lon': -82.50622 - } - } - } - ] + ], + 'filter': [{ + 'geo_distance': { + 'distance': '500km', + 'distance_type': 'plane', + 'optimize_bbox': 'indexed', + 'center_point': { + 'lat': 29.49136, + 'lon': -82.50622 + } } - } + }] } }, 'sort': [ diff --git a/test/unit/fixture/reverse_with_source_filtering.js b/test/unit/fixture/reverse_with_source_filtering.js index 28fce18b..21e04662 100644 --- a/test/unit/fixture/reverse_with_source_filtering.js +++ b/test/unit/fixture/reverse_with_source_filtering.js @@ -2,35 +2,25 @@ var vs = require('../../../query/reverse_defaults'); module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [] - } - }, - 'filter': { - 'bool': { - 'must': [ - { - 'geo_distance': { - 'distance': '500km', - 'distance_type': 'plane', - 'optimize_bbox': 'indexed', - '_cache': true, - 'center_point': { - 'lat': 29.49136, - 'lon': -82.50622 - } - } - }, - { - 'terms': { - 'source': ['test'] - } + 'bool': { + 'filter': [ + { + 'geo_distance': { + 'distance': '500km', + 'distance_type': 'plane', + 'optimize_bbox': 'indexed', + 'center_point': { + 'lat': 29.49136, + 'lon': -82.50622 } - ] + } + }, + { + 'terms': { + 'source': ['test'] + } } - } + ] } }, 'sort': [ diff --git a/test/unit/fixture/search_boundary_country.js b/test/unit/fixture/search_boundary_country.js index 71965df4..6af4e840 100644 --- a/test/unit/fixture/search_boundary_country.js +++ b/test/unit/fixture/search_boundary_country.js @@ -1,91 +1,87 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [ - { - 'match': { - 'parent.country_a': { - 'analyzer': 'standard', - 'query': 'ABC' - } - } - }, - { - 'match': { - 'name.default': { - 'query': 'test', - 'boost': 1, - 'analyzer': 'peliasIndexOneEdgeGram' - } - } + 'bool': { + 'must': [ + { + 'match': { + 'parent.country_a': { + 'analyzer': 'standard', + 'query': 'ABC' } - ], - 'should': [{ + } + }, + { + 'match': { + 'name.default': { + 'query': 'test', + 'boost': 1, + 'analyzer': 'peliasQueryFullToken' + } + } + } + ], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2 + } + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': 'test', 'analyzer': 'peliasPhrase', 'type': 'phrase', - 'boost': 1, - 'slop': 2 + 'slop': 2, + 'boost': 1 } } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 + } } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/search_full_address.js b/test/unit/fixture/search_full_address.js index ea85f716..6af4b35b 100644 --- a/test/unit/fixture/search_full_address.js +++ b/test/unit/fixture/search_full_address.js @@ -2,19 +2,55 @@ var vs = require('../../../query/search_defaults'); module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': '123 main st', + 'analyzer': 'peliasQueryFullToken', + 'boost': 1 + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': '123 main st', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 + } + } + }, + { + 'function_score': { + 'query': { 'match': { - 'name.default': { + 'phrase.default': { 'query': '123 main st', - 'analyzer': 'peliasIndexOneEdgeGram', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, 'boost': 1 } } - }], - 'should': [{ + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': '123 main st', @@ -25,114 +61,74 @@ module.exports = { } } }, - { - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': '123 main st', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': '123 main st', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] - } - },{ - 'match': { - 'address_parts.number': { - 'query': '123', - 'boost': vs['address:housenumber:boost'], - 'analyzer': vs['address:housenumber:analyzer'] - } - } - }, { - 'match': { - 'address_parts.street': { - 'query': 'main st', - 'boost': vs['address:street:boost'], - 'analyzer': vs['address:street:analyzer'] - } - } - }, { - 'match': { - 'address_parts.zip': { - 'query': '10010', - 'boost': vs['address:postcode:boost'], - 'analyzer': vs['address:postcode:analyzer'] - } - } - }, { - 'match': { - 'parent.country_a': { - 'query': 'USA', - 'boost': vs['admin:country_a:boost'], - 'analyzer': vs['admin:country_a:analyzer'] - } - } - }, { - 'match': { - 'parent.region_a': { - 'query': 'NY', - 'boost': vs['admin:region_a:boost'], - 'analyzer': vs['admin:region_a:analyzer'] - } - } - }, { - 'multi_match': { - 'fields': [ - 'parent.country^1', - 'parent.region^1', - 'parent.county^1', - 'parent.localadmin^1', - 'parent.locality^1', - 'parent.borough^1', - 'parent.neighbourhood^1', - 'parent.region_a^1' - ], - 'query': 'new york', - 'analyzer': 'peliasAdmin' - } + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - } + },{ + 'match': { + 'address_parts.number': { + 'query': '123', + 'boost': vs['address:housenumber:boost'], + 'analyzer': vs['address:housenumber:analyzer'] + } + } + }, { + 'match': { + 'address_parts.street': { + 'query': 'main st', + 'boost': vs['address:street:boost'], + 'analyzer': vs['address:street:analyzer'] + } + } + }, { + 'match': { + 'address_parts.zip': { + 'query': '10010', + 'boost': vs['address:postcode:boost'], + 'analyzer': vs['address:postcode:analyzer'] + } + } + }, { + 'match': { + 'parent.country_a': { + 'query': 'USA', + 'boost': vs['admin:country_a:boost'], + 'analyzer': vs['admin:country_a:analyzer'] + } + } + }, { + 'match': { + 'parent.region_a': { + 'query': 'NY', + 'boost': vs['admin:region_a:boost'], + 'analyzer': vs['admin:region_a:analyzer'] + } + } + }, { + 'multi_match': { + 'fields': [ + 'parent.country^1', + 'parent.region^1', + 'parent.county^1', + 'parent.localadmin^1', + 'parent.locality^1', + 'parent.borough^1', + 'parent.neighbourhood^1', + 'parent.region_a^1' + ], + 'query': 'new york', + 'analyzer': 'peliasAdmin' + } + }] } }, 'size': 10, diff --git a/test/unit/fixture/search_linguistic_bbox.js b/test/unit/fixture/search_linguistic_bbox.js index 6afe7be6..0a8f5ddc 100644 --- a/test/unit/fixture/search_linguistic_bbox.js +++ b/test/unit/fixture/search_linguistic_bbox.js @@ -1,97 +1,88 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': 'test', + 'boost': 1, + 'analyzer': 'peliasQueryFullToken' + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2 + } + } + },{ + 'function_score': { + 'query': { 'match': { - 'name.default': { + 'phrase.default': { 'query': 'test', - 'boost': 1, - 'analyzer': 'peliasIndexOneEdgeGram' + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 } } - }], - 'should': [{ + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': 'test', 'analyzer': 'peliasPhrase', 'type': 'phrase', - 'boost': 1, - 'slop': 2 + 'slop': 2, + 'boost': 1 } } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] - } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - }, - 'filter': { - 'bool': { - 'must': [{ - 'geo_bounding_box': { - 'center_point': { - 'top': 11.51, - 'right': -61.84, - 'bottom': 47.47, - 'left': -103.16 - }, - '_cache': true, - 'type': 'indexed' - } - }] + }], + 'filter': [{ + 'geo_bounding_box': { + 'center_point': { + 'top': 11.51, + 'right': -61.84, + 'bottom': 47.47, + 'left': -103.16 + }, + 'type': 'indexed' } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/search_linguistic_focus.js b/test/unit/fixture/search_linguistic_focus.js index da3e8fb3..e3c027c1 100644 --- a/test/unit/fixture/search_linguistic_focus.js +++ b/test/unit/fixture/search_linguistic_focus.js @@ -1,111 +1,107 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': 'test', + 'boost': 1, + 'analyzer': 'peliasQueryFullToken' + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2 + } + } + }, { + 'function_score': { + 'query': { 'match': { - 'name.default': { - 'query': 'test', + 'phrase.default': { + 'analyzer': 'peliasPhrase', + 'type': 'phrase', 'boost': 1, - 'analyzer': 'peliasIndexOneEdgeGram' + 'slop': 2, + 'query': 'test' } } + }, + 'functions': [{ + 'linear': { + 'center_point': { + 'origin': { + 'lat': 29.49136, + 'lon': -82.50622 + }, + 'offset': '0km', + 'scale': '50km', + 'decay': 0.5 + } + }, + 'weight': 2 }], - 'should': [{ + 'score_mode': 'avg', + 'boost_mode': 'replace' + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': 'test', 'analyzer': 'peliasPhrase', 'type': 'phrase', - 'boost': 1, - 'slop': 2 + 'slop': 2, + 'boost': 1 } } - }, { - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'boost': 1, - 'slop': 2, - 'query': 'test' - } - } - }, - 'functions': [{ - 'linear': { - 'center_point': { - 'origin': { - 'lat': 29.49136, - 'lon': -82.50622 - }, - 'offset': '1km', - 'scale': '50km', - 'decay': 0.5 - } - }, - 'weight': 2 - }], - 'score_mode': 'avg', - 'boost_mode': 'replace' - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 + } } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/search_linguistic_focus_bbox.js b/test/unit/fixture/search_linguistic_focus_bbox.js index d5042c0f..a185ea73 100644 --- a/test/unit/fixture/search_linguistic_focus_bbox.js +++ b/test/unit/fixture/search_linguistic_focus_bbox.js @@ -1,127 +1,118 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': 'test', + 'boost': 1, + 'analyzer': 'peliasQueryFullToken' + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2 + } + } + }, { + 'function_score': { + 'query': { 'match': { - 'name.default': { - 'query': 'test', + 'phrase.default': { + 'analyzer': 'peliasPhrase', + 'type': 'phrase', 'boost': 1, - 'analyzer': 'peliasIndexOneEdgeGram' + 'slop': 2, + 'query': 'test' } } + }, + 'functions': [{ + 'linear': { + 'center_point': { + 'origin': { + 'lat': 29.49136, + 'lon': -82.50622 + }, + 'offset': '0km', + 'scale': '50km', + 'decay': 0.5 + } + }, + 'weight': 2 }], - 'should': [{ + 'score_mode': 'avg', + 'boost_mode': 'replace' + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': 'test', 'analyzer': 'peliasPhrase', 'type': 'phrase', - 'boost': 1, - 'slop': 2 + 'slop': 2, + 'boost': 1 } } - }, { - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'boost': 1, - 'slop': 2, - 'query': 'test' - } - } - }, - 'functions': [{ - 'linear': { - 'center_point': { - 'origin': { - 'lat': 29.49136, - 'lon': -82.50622 - }, - 'offset': '1km', - 'scale': '50km', - 'decay': 0.5 - } - }, - 'weight': 2 - }], - 'score_mode': 'avg', - 'boost_mode': 'replace' - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] - } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 }] } - }, - 'filter': { - 'bool': { - 'must': [{ - 'geo_bounding_box': { - 'center_point': { - 'top': 11.51, - 'right': -61.84, - 'bottom': 47.47, - 'left': -103.16 - }, - '_cache': true, - 'type': 'indexed' + },{ + 'function_score': { + 'query': { + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 + } } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - } + }], + 'filter': [{ + 'geo_bounding_box': { + 'center_point': { + 'top': 11.51, + 'right': -61.84, + 'bottom': 47.47, + 'left': -103.16 + }, + 'type': 'indexed' + } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/search_linguistic_focus_null_island.js b/test/unit/fixture/search_linguistic_focus_null_island.js index b99febea..152a0c42 100644 --- a/test/unit/fixture/search_linguistic_focus_null_island.js +++ b/test/unit/fixture/search_linguistic_focus_null_island.js @@ -1,111 +1,107 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': 'test', + 'boost': 1, + 'analyzer': 'peliasQueryFullToken' + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2 + } + } + }, { + 'function_score': { + 'query': { 'match': { - 'name.default': { - 'query': 'test', + 'phrase.default': { + 'analyzer': 'peliasPhrase', + 'type': 'phrase', 'boost': 1, - 'analyzer': 'peliasIndexOneEdgeGram' + 'slop': 2, + 'query': 'test' } } + }, + 'functions': [{ + 'linear': { + 'center_point': { + 'origin': { + 'lat': 0, + 'lon': 0 + }, + 'offset': '0km', + 'scale': '50km', + 'decay': 0.5 + } + }, + 'weight': 2 }], - 'should': [{ + 'score_mode': 'avg', + 'boost_mode': 'replace' + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': 'test', 'analyzer': 'peliasPhrase', 'type': 'phrase', - 'boost': 1, - 'slop': 2 + 'slop': 2, + 'boost': 1 } } - }, { - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'boost': 1, - 'slop': 2, - 'query': 'test' - } - } - }, - 'functions': [{ - 'linear': { - 'center_point': { - 'origin': { - 'lat': 0, - 'lon': 0 - }, - 'offset': '1km', - 'scale': '50km', - 'decay': 0.5 - } - }, - 'weight': 2 - }], - 'score_mode': 'avg', - 'boost_mode': 'replace' - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 + } } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/search_linguistic_only.js b/test/unit/fixture/search_linguistic_only.js index a564a4c1..2e820c80 100644 --- a/test/unit/fixture/search_linguistic_only.js +++ b/test/unit/fixture/search_linguistic_only.js @@ -1,81 +1,77 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': 'test', + 'boost': 1, + 'analyzer': 'peliasQueryFullToken' + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2 + } + } + },{ + 'function_score': { + 'query': { 'match': { - 'name.default': { + 'phrase.default': { 'query': 'test', - 'boost': 1, - 'analyzer': 'peliasIndexOneEdgeGram' + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 } } - }], - 'should': [{ + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': 'test', 'analyzer': 'peliasPhrase', 'type': 'phrase', - 'boost': 1, - 'slop': 2 + 'slop': 2, + 'boost': 1 } } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] - } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/fixture/search_linguistic_viewport.js b/test/unit/fixture/search_linguistic_viewport.js index b85d8322..4f225a62 100644 --- a/test/unit/fixture/search_linguistic_viewport.js +++ b/test/unit/fixture/search_linguistic_viewport.js @@ -1,21 +1,65 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [ - { + 'bool': { + 'must': [ + { + 'match': { + 'name.default': { + 'analyzer': 'peliasQueryFullToken', + 'boost': 1, + 'query': 'test' + } + } + } + ], + 'should': [ + { + 'match': { + 'phrase.default': { + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2, + 'query': 'test' + } + } + }, + { + 'function_score': { + 'query': { 'match': { - 'name.default': { - 'analyzer': 'peliasIndexOneEdgeGram', + 'phrase.default': { + 'analyzer': 'peliasPhrase', + 'type': 'phrase', 'boost': 1, + 'slop': 2, 'query': 'test' } } - } - ], - 'should': [ - { + }, + 'functions': [ + { + 'weight': 2, + 'linear': { + 'center_point': { + 'origin': { + 'lat': 29.49136, + 'lon': -82.50622 + }, + 'offset': '0km', + 'scale': '50km', + 'decay': 0.5 + } + } + } + ], + 'score_mode': 'avg', + 'boost_mode': 'replace' + } + }, + { + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'analyzer': 'peliasPhrase', @@ -26,98 +70,50 @@ module.exports = { } } }, - { - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'boost': 1, - 'slop': 2, - 'query': 'test' - } - } + 'max_boost': 20, + 'functions': [ + { + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 }, - 'functions': [ - { - 'weight': 2, - 'linear': { - 'center_point': { - 'origin': { - 'lat': 29.49136, - 'lon': -82.50622 - }, - 'offset': '1km', - 'scale': '50km', - 'decay': 0.5 - } - } - } - ], - 'score_mode': 'avg', - 'boost_mode': 'replace' + 'weight': 1 } - }, - { - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'boost': 1, - 'slop': 2, - 'query': 'test' - } - } - }, - 'max_boost': 20, - 'functions': [ - { - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - } - ], - 'score_mode': 'first', - 'boost_mode': 'replace' + ], + 'score_mode': 'first', + 'boost_mode': 'replace' + } + }, + { + 'function_score': { + 'query': { + 'match': { + 'phrase.default': { + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2, + 'query': 'test' + } } }, - { - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'boost': 1, - 'slop': 2, - 'query': 'test' - } - } + 'max_boost': 20, + 'functions': [ + { + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 }, - 'max_boost': 20, - 'functions': [ - { - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - } - ], - 'score_mode': 'first', - 'boost_mode': 'replace' + 'weight': 2 } - } - ] + ], + 'score_mode': 'first', + 'boost_mode': 'replace' + } } - } + ] } }, 'size': 10, diff --git a/test/unit/fixture/search_linguistic_viewport_min_diagonal.js b/test/unit/fixture/search_linguistic_viewport_min_diagonal.js index e6b50ac6..e5dbb862 100644 --- a/test/unit/fixture/search_linguistic_viewport_min_diagonal.js +++ b/test/unit/fixture/search_linguistic_viewport_min_diagonal.js @@ -7,7 +7,7 @@ module.exports = { { 'match': { 'name.default': { - 'analyzer': 'peliasIndexOneEdgeGram', + 'analyzer': 'peliasQueryFullToken', 'boost': 1, 'query': 'test' } @@ -48,7 +48,7 @@ module.exports = { 'lat': 28.49136, 'lon': -87.50623 }, - 'offset': '1km', + 'offset': '0km', 'scale': '1km', 'decay': 0.5 } diff --git a/test/unit/fixture/search_partial_address.js b/test/unit/fixture/search_partial_address.js index a6cf47e5..ec8ff4ea 100644 --- a/test/unit/fixture/search_partial_address.js +++ b/test/unit/fixture/search_partial_address.js @@ -3,19 +3,54 @@ var vs = require('../../../query/search_defaults'); module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': 'soho grand', + 'analyzer': 'peliasQueryFullToken', + 'boost': 1 + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': 'soho grand', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 + } + } + },{ + 'function_score': { + 'query': { 'match': { - 'name.default': { + 'phrase.default': { 'query': 'soho grand', - 'analyzer': 'peliasIndexOneEdgeGram', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, 'boost': 1 } } - }], - 'should': [{ + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': 'soho grand', @@ -25,82 +60,43 @@ module.exports = { 'boost': 1 } } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'soho grand', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'soho grand', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] - } - }, { - 'match': { - 'parent.region_a': { - 'analyzer': 'peliasAdmin', - 'boost': 1, - 'query': 'new york' - } - } - }, { - 'multi_match': { - 'fields': [ - 'parent.country^1', - 'parent.region^1', - 'parent.county^1', - 'parent.localadmin^1', - 'parent.locality^1', - 'parent.borough^1', - 'parent.neighbourhood^1', - 'parent.region_a^1' - ], - 'query': 'new york', - 'analyzer': 'peliasAdmin' - } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - } + }, { + 'match': { + 'parent.region_a': { + 'analyzer': 'peliasAdmin', + 'boost': 1, + 'query': 'new york' + } + } + }, { + 'multi_match': { + 'fields': [ + 'parent.country^1', + 'parent.region^1', + 'parent.county^1', + 'parent.localadmin^1', + 'parent.locality^1', + 'parent.borough^1', + 'parent.neighbourhood^1', + 'parent.region_a^1' + ], + 'query': 'new york', + 'analyzer': 'peliasAdmin' + } + }] } }, 'size': 10, diff --git a/test/unit/fixture/search_regions_address.js b/test/unit/fixture/search_regions_address.js index 195358c7..cf65b199 100644 --- a/test/unit/fixture/search_regions_address.js +++ b/test/unit/fixture/search_regions_address.js @@ -3,19 +3,54 @@ var vs = require('../../../query/search_defaults'); module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': '1 water st', + 'analyzer': 'peliasQueryFullToken', + 'boost': 1 + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': '1 water st', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 + } + } + },{ + 'function_score': { + 'query': { 'match': { - 'name.default': { + 'phrase.default': { 'query': '1 water st', - 'analyzer': 'peliasIndexOneEdgeGram', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, 'boost': 1 } } - }], - 'should': [{ + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': '1 water st', @@ -25,98 +60,59 @@ module.exports = { 'boost': 1 } } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': '1 water st', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': '1 water st', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] - } - },{ - 'match': { - 'address_parts.number': { - 'query': '1', - 'boost': vs['address:housenumber:boost'], - 'analyzer': vs['address:housenumber:analyzer'] - } - } - }, { - 'match': { - 'address_parts.street': { - 'query': 'water st', - 'boost': vs['address:street:boost'], - 'analyzer': vs['address:street:analyzer'] - } - } - }, { - 'match': { - 'parent.region_a': { - 'query': 'NY', - 'boost': vs['admin:region_a:boost'], - 'analyzer': vs['admin:region_a:analyzer'] - } - } - }, { - 'multi_match': { - 'fields': [ - 'parent.country^1', - 'parent.region^1', - 'parent.county^1', - 'parent.localadmin^1', - 'parent.locality^1', - 'parent.borough^1', - 'parent.neighbourhood^1', - 'parent.region_a^1' - ], - 'query': 'manhattan', - 'analyzer': 'peliasAdmin' - } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - } + },{ + 'match': { + 'address_parts.number': { + 'query': '1', + 'boost': vs['address:housenumber:boost'], + 'analyzer': vs['address:housenumber:analyzer'] + } + } + }, { + 'match': { + 'address_parts.street': { + 'query': 'water st', + 'boost': vs['address:street:boost'], + 'analyzer': vs['address:street:analyzer'] + } + } + }, { + 'match': { + 'parent.region_a': { + 'query': 'NY', + 'boost': vs['admin:region_a:boost'], + 'analyzer': vs['admin:region_a:analyzer'] + } + } + }, { + 'multi_match': { + 'fields': [ + 'parent.country^1', + 'parent.region^1', + 'parent.county^1', + 'parent.localadmin^1', + 'parent.locality^1', + 'parent.borough^1', + 'parent.neighbourhood^1', + 'parent.region_a^1' + ], + 'query': 'manhattan', + 'analyzer': 'peliasAdmin' + } + }] } }, 'size': 10, diff --git a/test/unit/fixture/search_with_source_filtering.js b/test/unit/fixture/search_with_source_filtering.js index 18ee13a3..24da9468 100644 --- a/test/unit/fixture/search_with_source_filtering.js +++ b/test/unit/fixture/search_with_source_filtering.js @@ -1,90 +1,82 @@ module.exports = { 'query': { - 'filtered': { - 'query': { - 'bool': { - 'must': [{ + 'bool': { + 'must': [{ + 'match': { + 'name.default': { + 'query': 'test', + 'boost': 1, + 'analyzer': 'peliasQueryFullToken' + } + } + }], + 'should': [{ + 'match': { + 'phrase.default': { + 'query': 'test', + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'boost': 1, + 'slop': 2 + } + } + },{ + 'function_score': { + 'query': { 'match': { - 'name.default': { + 'phrase.default': { 'query': 'test', - 'boost': 1, - 'analyzer': 'peliasIndexOneEdgeGram' + 'analyzer': 'peliasPhrase', + 'type': 'phrase', + 'slop': 2, + 'boost': 1 } } - }], - 'should': [{ + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'popularity', + 'missing': 1 + }, + 'weight': 1 + }] + } + },{ + 'function_score': { + 'query': { 'match': { 'phrase.default': { 'query': 'test', 'analyzer': 'peliasPhrase', 'type': 'phrase', - 'boost': 1, - 'slop': 2 + 'slop': 2, + 'boost': 1 } } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'popularity', - 'missing': 1 - }, - 'weight': 1 - }] - } - },{ - 'function_score': { - 'query': { - 'match': { - 'phrase.default': { - 'query': 'test', - 'analyzer': 'peliasPhrase', - 'type': 'phrase', - 'slop': 2, - 'boost': 1 - } - } - }, - 'max_boost': 20, - 'score_mode': 'first', - 'boost_mode': 'replace', - 'functions': [{ - 'field_value_factor': { - 'modifier': 'log1p', - 'field': 'population', - 'missing': 1 - }, - 'weight': 2 - }] - } + }, + 'max_boost': 20, + 'score_mode': 'first', + 'boost_mode': 'replace', + 'functions': [{ + 'field_value_factor': { + 'modifier': 'log1p', + 'field': 'population', + 'missing': 1 + }, + 'weight': 2 }] } - }, - 'filter': { - 'bool': { - 'must': [{ - 'terms': { - 'source': ['test_source'] - } - }] + }], + 'filter': [{ + 'terms': { + 'source': ['test_source'] } - } + }] } }, 'sort': [ '_score' ], diff --git a/test/unit/query/reverse.js b/test/unit/query/reverse.js index 4060d679..db0daa12 100644 --- a/test/unit/query/reverse.js +++ b/test/unit/query/reverse.js @@ -22,7 +22,7 @@ module.exports.tests.query = function(test, common) { var compiled = JSON.parse( JSON.stringify( query ) ); var expected = require('../fixture/reverse_standard'); - t.deepEqual(compiled, expected, 'valid reverse query'); + t.deepEqual(compiled, expected, 'reverse_standard'); t.end(); }); @@ -38,7 +38,7 @@ module.exports.tests.query = function(test, common) { var compiled = JSON.parse( JSON.stringify( query ) ); var expected = require('../fixture/reverse_null_island'); - t.deepEqual(compiled, expected, 'valid reverse query'); + t.deepEqual(compiled, expected, 'reverse_null_island'); t.end(); }); @@ -54,7 +54,7 @@ module.exports.tests.query = function(test, common) { var compiled = JSON.parse( JSON.stringify( query ) ); var expected = '123km'; - t.deepEqual(compiled.query.filtered.filter.bool.must[0].geo_distance.distance, expected, 'distance set to boundary circle radius'); + t.deepEqual(compiled.query.bool.filter[0].geo_distance.distance, expected, 'distance set to boundary circle radius'); t.end(); }); @@ -71,9 +71,9 @@ module.exports.tests.query = function(test, common) { // this should not equal `point.lat` and `point.lon` as it was explitely specified var expected = { lat: clean['boundary.circle.lat'], lon: clean['boundary.circle.lon'] }; - var centroid = compiled.query.filtered.filter.bool.must[0].geo_distance.center_point; + var centroid = compiled.query.bool.filter[0].geo_distance.center_point; - t.deepEqual(centroid, expected, 'boundary.circle/lon overrides point.lat/lon'); + t.deepEqual(centroid, expected, 'reverse: boundary.circle/lon overrides point.lat/lon'); t.end(); }); diff --git a/test/unit/query/search.js b/test/unit/query/search.js index a2bb8e2f..29c8a06e 100644 --- a/test/unit/query/search.js +++ b/test/unit/query/search.js @@ -178,7 +178,7 @@ module.exports.tests.query = function(test, common) { var compiled = JSON.parse( JSON.stringify( query ) ); var expected = require('../fixture/search_boundary_country'); - t.deepEqual(compiled, expected, 'valid boundary.country query'); + t.deepEqual(compiled, expected, 'search: valid boundary.country query'); t.end(); }); @@ -191,7 +191,7 @@ module.exports.tests.query = function(test, common) { var compiled = JSON.parse( JSON.stringify( query ) ); var expected = require('../fixture/search_with_source_filtering'); - t.deepEqual(compiled, expected, 'valid search query with source filtering'); + t.deepEqual(compiled, expected, 'search: valid search query with source filtering'); t.end(); }); diff --git a/test/unit/sanitiser/_sources_and_layers.js b/test/unit/sanitiser/_sources_and_layers.js index 96001f4e..dfb997fa 100644 --- a/test/unit/sanitiser/_sources_and_layers.js +++ b/test/unit/sanitiser/_sources_and_layers.js @@ -51,6 +51,17 @@ module.exports.tests.no_errors = function(test, common) { t.end(); }); +test('valid combination', function(t) { + var raw = {}; + var clean = { sources: ['geonames'], layers: ['macroregion'] }; + + var messages = sanitize(raw, clean); + + t.equal(messages.errors.length, 0, 'should return no errors'); + t.equal(messages.warnings.length, 0, 'should return no warnings'); + t.end(); + }); + test('valid combination because of multiple sources', function(t) { var raw = {}; var clean = { sources: ['openstreetmap', 'openaddresses'], layers: ['venue'] }; diff --git a/test/unit/sanitiser/_tokenizer.js b/test/unit/sanitiser/_tokenizer.js index 8837d4ab..58d9cca8 100644 --- a/test/unit/sanitiser/_tokenizer.js +++ b/test/unit/sanitiser/_tokenizer.js @@ -372,8 +372,10 @@ module.exports.tests.final_token_single_gram = function(test, common) { 'grolmanstrasse', ], 'tokens produced'); - // last token removed! - t.deepEquals(clean.tokens_incomplete, [], 'no tokens'); + // last token marked as 'incomplete' + t.deepEquals(clean.tokens_incomplete, [ + 'a' + ], 'tokens produced'); // no errors/warnings produced t.deepEquals(messages.errors, [], 'no errors');