1 | 'use strict';
|
2 |
|
3 | const _ = require('lodash');
|
4 | const Query = require('./Query');
|
5 |
|
6 | class VenuesQuery extends Query {
|
7 | constructor() {
|
8 | super();
|
9 | }
|
10 |
|
11 | render(vs) {
|
12 |
|
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 |
|
48 | if (!_.isEmpty(this._score)) {
|
49 | base.query.function_score.functions = _.compact(this._score.map(view => view(vs)));
|
50 | }
|
51 |
|
52 |
|
53 | if (!_.isEmpty(this._filter)) {
|
54 |
|
55 |
|
56 |
|
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 |
|
68 | module.exports = VenuesQuery;
|