@attivio/suit
Version:
Attivio SUIT, the Search UI Toolkit, is a library for creating search clients for searching the Attivio platform.
99 lines (75 loc) • 2.98 kB
JavaScript
;
exports.__esModule = true;
exports.default = undefined;
var _SolrToQueryResponse = require('./SolrToQueryResponse');
var _SolrToQueryResponse2 = _interopRequireDefault(_SolrToQueryResponse);
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 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, _SolrToQueryResponse2.default.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;
}();
exports.default = QueryRequestToSolr;
module.exports = exports['default'];