UNPKG

1.74 kBJavaScriptView Raw
1'use strict';
2
3const _ = require('lodash');
4const Query = require('./Query');
5
6class VenuesQuery extends Query {
7 constructor() {
8 super();
9 }
10
11 render(vs) {
12 // establish a base query with 'name' must condition and size/track_scores
13 const base = {
14 query: {
15 function_score: {
16 query: {
17 bool: {
18 must: [
19 {
20 match_phrase: {
21 'name.default': {
22 query: vs.var('input:query'),
23 analyzer: 'standard'
24 }
25 }
26 }
27 ],
28 filter: {
29 bool: {
30 must: [
31 {
32 term: {
33 layer: 'venue'
34 }
35 }
36 ]
37 }
38 }
39 }
40 }
41 }
42 },
43 size: vs.var('size'),
44 track_scores: vs.var('track_scores')
45 };
46
47 // add any scores (_.compact removes falsey values from arrays)
48 if (!_.isEmpty(this._score)) {
49 base.query.function_score.functions = _.compact(this._score.map(view => view(vs)));
50 }
51
52 // add any filters
53 if (!_.isEmpty(this._filter)) {
54 // add filter.bool.must, creating intermediate objects if they don't exist
55 // using _.set does away with the need to check for object existence
56 // _.compact removes falsey values from arrays
57 base.query.function_score.query.bool.filter.bool.must = _.concat(
58 base.query.function_score.query.bool.filter.bool.must,
59 _.compact(this._filter.map(view => view(vs))));
60
61 }
62
63 return base;
64 }
65
66}
67
68module.exports = VenuesQuery;