Browse Source

better population and popularity boosting

pull/338/head
Peter Johnson 9 years ago
parent
commit
cb679888ff
  1. 2
      package.json
  2. 3
      query/autocomplete.js
  3. 12
      query/defaults.js
  4. 3
      query/search.js
  5. 58
      test/unit/fixture/autocomplete_linguistic_focus.js
  6. 58
      test/unit/fixture/autocomplete_linguistic_focus_null_island.js
  7. 58
      test/unit/fixture/autocomplete_linguistic_only.js
  8. 58
      test/unit/fixture/search_boundary_country.js
  9. 55
      test/unit/fixture/search_full_address.js
  10. 58
      test/unit/fixture/search_linguistic_bbox.js
  11. 58
      test/unit/fixture/search_linguistic_focus.js
  12. 58
      test/unit/fixture/search_linguistic_focus_bbox.js
  13. 58
      test/unit/fixture/search_linguistic_focus_null_island.js
  14. 58
      test/unit/fixture/search_linguistic_only.js
  15. 58
      test/unit/fixture/search_partial_address.js
  16. 58
      test/unit/fixture/search_regions_address.js

2
package.json

@ -51,7 +51,7 @@
"pelias-config": "^1.0.1", "pelias-config": "^1.0.1",
"pelias-esclient": "0.0.25", "pelias-esclient": "0.0.25",
"pelias-logger": "^0.0.8", "pelias-logger": "^0.0.8",
"pelias-query": "2.0.0", "pelias-query": "4.0.0",
"pelias-schema": "1.0.0", "pelias-schema": "1.0.0",
"pelias-suggester-pipeline": "2.0.2", "pelias-suggester-pipeline": "2.0.2",
"stats-lite": "^1.0.3", "stats-lite": "^1.0.3",

3
query/autocomplete.js

@ -14,7 +14,8 @@ query.score( peliasQuery.view.ngrams, 'must' );
// scoring boost // scoring boost
query.score( peliasQuery.view.phrase ); query.score( peliasQuery.view.phrase );
query.score( peliasQuery.view.focus( peliasQuery.view.ngrams ) ); query.score( peliasQuery.view.focus( peliasQuery.view.ngrams ) );
query.score( peliasQuery.view.popularity(['admin0','admin1','admin2']) ); query.score( peliasQuery.view.popularity( peliasQuery.view.phrase ) );
query.score( peliasQuery.view.population( peliasQuery.view.phrase ) );
// -------------------------------- // --------------------------------

12
query/defaults.js

@ -79,6 +79,16 @@ module.exports = extend( false, peliasQuery.defaults, {
'admin:neighborhood:analyzer': 'peliasAdmin', 'admin:neighborhood:analyzer': 'peliasAdmin',
'admin:neighborhood:field': 'neighborhood', 'admin:neighborhood:field': 'neighborhood',
'admin:neighborhood:boost': 1 'admin:neighborhood:boost': 1,
'popularity:field': 'popularity',
'popularity:modifier': 'sqrt',
'popularity:max_boost': 10000,
'popularity:weight': 1,
'population:field': 'population',
'population:modifier': 'sqrt',
'population:max_boost': 2000,
'population:weight': 1
}); });

3
query/search.js

@ -15,7 +15,8 @@ query.score( peliasQuery.view.ngrams, 'must' );
// scoring boost // scoring boost
query.score( peliasQuery.view.phrase ); query.score( peliasQuery.view.phrase );
query.score( peliasQuery.view.focus( peliasQuery.view.phrase ) ); query.score( peliasQuery.view.focus( peliasQuery.view.phrase ) );
query.score( peliasQuery.view.popularity(['admin0','admin1','admin2']) ); query.score( peliasQuery.view.popularity( peliasQuery.view.phrase ) );
query.score( peliasQuery.view.population( peliasQuery.view.phrase ) );
// address components // address components
query.score( peliasQuery.view.address('housenumber') ); query.score( peliasQuery.view.address('housenumber') );

58
test/unit/fixture/autocomplete_linguistic_focus.js

@ -50,44 +50,60 @@ module.exports = {
'score_mode': 'avg', 'score_mode': 'avg',
'boost_mode': 'replace' 'boost_mode': 'replace'
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2'
} }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
}
}
},
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
} }
]
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/autocomplete_linguistic_focus_null_island.js

@ -50,44 +50,60 @@ module.exports = {
'score_mode': 'avg', 'score_mode': 'avg',
'boost_mode': 'replace' 'boost_mode': 'replace'
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2'
} }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
}
}
},
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
} }
]
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/autocomplete_linguistic_only.js

@ -23,44 +23,60 @@ module.exports = {
'slop': 2 'slop': 2
} }
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2'
} }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
}
}
},
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
} }
]
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/search_boundary_country.js

@ -33,44 +33,60 @@ module.exports = {
'slop': 2 'slop': 2
} }
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2' }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
] },
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
}
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

55
test/unit/fixture/search_full_address.js

@ -30,40 +30,57 @@ module.exports = {
{ {
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': '123 main st',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2'
} }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': '123 main st',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
}
}
},
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
} }
]
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/search_linguistic_bbox.js

@ -23,44 +23,60 @@ module.exports = {
'slop': 2 'slop': 2
} }
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2'
} }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
}
}
},
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
} }
]
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/search_linguistic_focus.js

@ -52,44 +52,60 @@ module.exports = {
'score_mode': 'avg', 'score_mode': 'avg',
'boost_mode': 'replace' 'boost_mode': 'replace'
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2' }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
] },
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
}
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/search_linguistic_focus_bbox.js

@ -52,44 +52,60 @@ module.exports = {
'score_mode': 'avg', 'score_mode': 'avg',
'boost_mode': 'replace' 'boost_mode': 'replace'
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2' }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
] },
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
}
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/search_linguistic_focus_null_island.js

@ -52,44 +52,60 @@ module.exports = {
'score_mode': 'avg', 'score_mode': 'avg',
'boost_mode': 'replace' 'boost_mode': 'replace'
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2' }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
] },
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
}
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/search_linguistic_only.js

@ -23,44 +23,60 @@ module.exports = {
'slop': 2 'slop': 2
} }
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'test',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2'
} }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'test',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
}
}
},
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
} }
]
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/search_partial_address.js

@ -26,44 +26,60 @@ module.exports = {
'boost': 1 'boost': 1
} }
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': 'soho grand',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2' }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': 'soho grand',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
] },
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
}
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

58
test/unit/fixture/search_regions_address.js

@ -26,44 +26,60 @@ module.exports = {
'boost': 1 'boost': 1
} }
} }
}, },{
{
'function_score': { 'function_score': {
'query': { 'query': {
'filtered': { 'match': {
'filter': { 'phrase.default': {
'exists': { 'query': '1 water st',
'field': 'popularity' 'analyzer': 'peliasPhrase',
} 'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
}, },
'max_boost': 2, 'max_boost': 10000,
'score_mode': 'first', 'score_mode': 'first',
'boost_mode': 'replace', 'boost_mode': 'replace',
'filter': { 'filter': {
'or': [ 'exists': {
{ 'field': 'popularity'
'type': {
'value': 'admin0'
} }
}, },
{ 'functions': [{
'type': { 'field_value_factor': {
'value': 'admin1' 'modifier': 'sqrt',
} 'field': 'popularity'
}, },
{ 'weight': 1
'type': { }]
'value': 'admin2' }
},{
'function_score': {
'query': {
'match': {
'phrase.default': {
'query': '1 water st',
'analyzer': 'peliasPhrase',
'type': 'phrase',
'slop': 2,
'boost': 1
} }
} }
] },
'max_boost': 2000,
'score_mode': 'first',
'boost_mode': 'replace',
'filter': {
'exists': {
'field': 'population'
}
}, },
'functions': [{ 'functions': [{
'field_value_factor': { 'field_value_factor': {
'modifier': 'sqrt', 'modifier': 'sqrt',
'field': 'popularity' 'field': 'population'
}, },
'weight': 1 'weight': 1
}] }]

Loading…
Cancel
Save