UNPKG

1.61 kBJavaScriptView Raw
1
2module.exports = function( types ){
3 return function( vs ){
4
5 // validate required params
6 if( !vs.isset('focus:point:lat') ||
7 !vs.isset('focus:point:lon') ||
8 !vs.isset('centroid:field') ||
9 !vs.isset('localregions:weight') ||
10 !vs.isset('localregions:function') ||
11 !vs.isset('localregions:offset') ||
12 !vs.isset('localregions:scale') ||
13 !vs.isset('localregions:decay') ){
14 return null;
15 }
16
17 // base view
18 var view = {
19 function_score: {
20 // filter: {
21 // 'or': [
22 // { 'type': { 'value': 'locality' } },
23 // { 'type': { 'value': 'localadmin' } },
24 // { 'type': { 'value': 'neighbourhood' } }
25 // ]
26 // },
27 // max_boost: 2,
28 functions: [],
29 score_mode: 'first',
30 boost_mode: 'replace'
31 }
32 };
33
34 // a list of _types to target
35 if( Array.isArray( types ) ){
36 view.function_score.filter = {
37 or: types.map( function( type ){
38 return { type: { value: type } };
39 })
40 };
41 }
42
43 // decay function
44 var func = { weight: vs.var('localregions:weight') };
45 func[ vs.var('localregions:function') ] = {};
46 func[ vs.var('localregions:function') ][ vs.var('centroid:field') ] = {
47 origin: {
48 lat: vs.var('focus:point:lat'),
49 lon: vs.var('focus:point:lon')
50 },
51 offset: vs.var('localregions:offset'),
52 scale: vs.var('localregions:scale'),
53 decay: vs.var('localregions:decay')
54 };
55 view.function_score.functions.push( func );
56
57 return view;
58 };
59};
\No newline at end of file