UNPKG

@attivio/suit

Version:

Attivio SUIT, the Search UI Toolkit, is a library for creating search clients for searching the Attivio platform.

109 lines (88 loc) 3.11 kB
'use strict'; exports.__esModule = true; exports.default = undefined; var _ElasticToQueryResponse = require('./ElasticToQueryResponse'); var _ElasticToQueryResponse2 = _interopRequireDefault(_ElasticToQueryResponse); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var QueryRequestToElastic = function () { function QueryRequestToElastic() { _classCallCheck(this, QueryRequestToElastic); } QueryRequestToElastic.convert = function convert(qr, baseUri, customOptions, callback) { var query = qr.query, _qr$rows = qr.rows, rows = _qr$rows === undefined ? 0 : _qr$rows, _qr$sort = qr.sort, sort = _qr$sort === undefined ? ['.score:DESC'] : _qr$sort, facetFilters = qr.facetFilters; var _qr$restParams$offset = qr.restParams.offset, offset = _qr$restParams$offset === undefined ? ['0'] : _qr$restParams$offset; var body = JSON.stringify({ query: { query_string: { query: QueryRequestToElastic.buildQuery(query, facetFilters) } }, size: rows, from: offset.pop(), sort: QueryRequestToElastic.buildSort(sort, customOptions), aggs: QueryRequestToElastic.buildFacets(customOptions.facets) }); var headers = new Headers({ Accept: 'application/json', 'Content-Type': 'application/json' }); var params = { method: 'POST', headers: headers, body: body }; var requestUri = '' + baseUri; var fetchRequest = new Request(requestUri, params); fetch(fetchRequest).then(function (r) { return r.json(); }).then(function (r) { return callback(undefined, _ElasticToQueryResponse2.default.convert(r, customOptions)); }).catch(function (e) { return callback('Error: ' + e); }); }; QueryRequestToElastic.buildQuery = function buildQuery(query, facetFilters) { if (facetFilters.length === 0) { return query; } return query + ' AND ' + facetFilters.map(function (ff) { return ff.filter; }).join(' AND '); }; QueryRequestToElastic.buildFacets = function buildFacets(facets) { var aggs = {}; facets.forEach(function (f) { aggs[f.field] = { terms: { field: f.field } }; }); return aggs; }; QueryRequestToElastic.buildSort = function buildSort(sort, customConfig) { if (sort.length === 0) { return []; } var _sort$0$split = sort[0].split(':'), field = _sort$0$split[0], order = _sort$0$split[1]; var fieldInElastic = void 0; switch (field) { case '.score': fieldInElastic = '_score'; break; default: fieldInElastic = customConfig.mappings[field]; } var sortObj = {}; sortObj[fieldInElastic] = order; return [sortObj]; }; return QueryRequestToElastic; }(); exports.default = QueryRequestToElastic; module.exports = exports['default'];