UNPKG

1.47 kBJavaScriptView Raw
1
2module.exports = function( subview ){
3 return function( vs ){
4
5 // query section reduces the number of records which
6 // the decay function is applied to.
7 // we simply re-use the another view for the function query.
8 if( !subview ){ return null; } // subview validation failed
9
10 // validate required params
11 if( !vs.isset('focus:point:lat') ||
12 !vs.isset('focus:point:lon') ||
13 !vs.isset('centroid:field') ||
14 !vs.isset('function_score:score_mode') ||
15 !vs.isset('function_score:boost_mode') ||
16 !vs.isset('focus:weight') ||
17 !vs.isset('focus:function') ||
18 !vs.isset('focus:offset') ||
19 !vs.isset('focus:scale') ||
20 !vs.isset('focus:decay') ){
21 return null;
22 }
23
24 // base view
25 var view = {
26 function_score: {
27 query: subview( vs ),
28 functions: [],
29 score_mode: vs.var('function_score:score_mode'),
30 boost_mode: vs.var('function_score:boost_mode')
31 }
32 };
33
34 // decay function
35 var func = { weight: vs.var('focus:weight') };
36 func[ vs.var('focus:function') ] = {};
37 func[ vs.var('focus:function') ][ vs.var('centroid:field') ] = {
38 origin: {
39 lat: vs.var('focus:point:lat'),
40 lon: vs.var('focus:point:lon')
41 },
42 offset: vs.var('focus:offset'),
43 scale: vs.var('focus:scale'),
44 decay: vs.var('focus:decay')
45 };
46 view.function_score.functions.push( func );
47
48 return view;
49 };
50};