queryBuilder.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. define([
  2. ],
  3. function () {
  4. 'use strict';
  5. function ElasticQueryBuilder() {
  6. }
  7. ElasticQueryBuilder.prototype.build = function(targets) {
  8. var query = {
  9. "facets": {},
  10. "size": "$maxDataPoints"
  11. };
  12. var self = this;
  13. targets.forEach(function(target) {
  14. if (!target.hide) {
  15. query["facets"][target.termKey + "_" + target.termValue] = {
  16. "date_histogram": {
  17. "interval": target.interval || "$interval",
  18. "key_field": target.keyField,
  19. "min_doc_count": 0,
  20. "value_field": target.valueField
  21. },
  22. "facet_filter": {
  23. "and": [
  24. self._buildRangeFilter(target),
  25. self._buildTermFilter(target)
  26. ]
  27. }
  28. };
  29. }
  30. });
  31. query = JSON.stringify(query);
  32. return query;
  33. };
  34. ElasticQueryBuilder.prototype._buildRangeFilter = function(target) {
  35. var filter = {"range":{}};
  36. filter["range"][target.keyField] = {
  37. "gte": "$rangeFrom",
  38. "lte": "$rangeTo"
  39. };
  40. return filter;
  41. };
  42. ElasticQueryBuilder.prototype._buildTermFilter = function(target) {
  43. var filter = {"term":{}};
  44. filter["term"][target.termKey] = target.termValue;
  45. return filter;
  46. };
  47. return ElasticQueryBuilder;
  48. });