UNPKG

@attivio/suit

Version:

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

89 lines (69 loc) 2.69 kB
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } import SolrToQueryResponse from './SolrToQueryResponse'; var QueryRequestToSolr = function () { function QueryRequestToSolr() { _classCallCheck(this, QueryRequestToSolr); } QueryRequestToSolr.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, limit: parseInt(rows, 10), filter: QueryRequestToSolr.buildFilter(facetFilters), sort: QueryRequestToSolr.buildSort(sort, customOptions), facet: QueryRequestToSolr.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 + '?start=' + parseInt(offset.pop(), 10); var fetchRequest = new Request(requestUri, params); fetch(fetchRequest).then(function (r) { return r.json(); }).then(function (r) { return callback(undefined, SolrToQueryResponse.convert(r, customOptions)); }).catch(function (e) { return callback('Error: ' + e); }); }; QueryRequestToSolr.buildFilter = function buildFilter(facetFilters) { if (!facetFilters || facetFilters.length === 0) return ''; return '' + facetFilters.map(function (ff) { return ff.filter; }).join(' AND '); }; QueryRequestToSolr.buildFacets = function buildFacets(facets) { var aggs = {}; facets.forEach(function (f) { aggs[f.field] = { terms: { field: f.field } }; }); return aggs; }; QueryRequestToSolr.buildSort = function buildSort(sort, customConfig) { if (!sort || !sort[0] || sort[0].length === 0) return 'score DESC'; var _sort$0$split = sort[0].split(':'), field = _sort$0$split[0], order = _sort$0$split[1]; var fieldInSolr = customConfig.mappings[field]; if (field.indexOf('.score') === 0) return 'score ' + order; if (fieldInSolr) { return fieldInSolr + ' ' + order; } return field + ' ' + order; }; return QueryRequestToSolr; }(); export { QueryRequestToSolr as default };