@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
JavaScript
;
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'];