@attivio/suit
Version:
Attivio SUIT, the Search UI Toolkit, is a library for creating search clients for searching the Attivio platform.
102 lines (76 loc) • 3.24 kB
JavaScript
;
exports.__esModule = true;
exports.default = undefined;
var _QueryResponse = require('../api/QueryResponse');
var _QueryResponse2 = _interopRequireDefault(_QueryResponse);
var _SearchDocument = require('../api/SearchDocument');
var _SearchDocument2 = _interopRequireDefault(_SearchDocument);
var _SearchFacet = require('../api/SearchFacet');
var _SearchFacet2 = _interopRequireDefault(_SearchFacet);
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"); } }
/**
* Convert the response from a call to the Elasticsearch
* engine into an Attivio QueryResponse so that it can be
* processed by the Search UI.
*/
var ElasticToQueryResponse = function () {
function ElasticToQueryResponse() {
_classCallCheck(this, ElasticToQueryResponse);
}
ElasticToQueryResponse.convert = function convert(json, customOptions) {
var result = new _QueryResponse2.default();
if (json.took) {
result.totalTime = json.took;
}
if (json.hits.total) {
result.totalHits = json.hits.total;
}
if (json.hits.hits.length > 0) {
result.documents = ElasticToQueryResponse.getElasticDocuments(json.hits.hits, customOptions);
}
if (json.aggregations || Object.keys(json.aggregations).length > 0) {
result.facets = ElasticToQueryResponse.getElasticFacets(json.aggregations, customOptions);
}
return result;
};
/**
* Turn non-array field values into arrays.
*/
ElasticToQueryResponse.wrapIfNotArray = function wrapIfNotArray(v) {
return Array.isArray(v) ? v : [v];
};
ElasticToQueryResponse.getElasticDocuments = function getElasticDocuments(documents, customOptions) {
return documents.map(function (doc) {
var mapp = customOptions.mappings;
var fields = {};
Object.keys(mapp).forEach(function (k) {
if (mapp[k] && doc._source[mapp[k]]) {
// eslint-disable-line no-underscore-dangle
fields[k] = ElasticToQueryResponse.wrapIfNotArray(doc._source[mapp[k]]); // eslint-disable-line no-underscore-dangle
}
});
fields['.id'] = [doc._id]; // eslint-disable-line no-underscore-dangle
fields['.score'] = [doc._score || 0]; // eslint-disable-line no-underscore-dangle
return _SearchDocument2.default.fromJson({ fields: fields });
});
};
ElasticToQueryResponse.getElasticFacets = function getElasticFacets(facets, customOptions) {
return Object.keys(facets).map(function (field) {
var facetConfig = customOptions.facets.find(function (f) {
return f.field === field;
}) || {};
return _SearchFacet2.default.fromJson({
name: facetConfig.field,
field: facetConfig.field,
label: facetConfig.displayName,
buckets: facets[field].buckets.map(function (b) {
return { value: b.key, count: b.doc_count, filter: facetConfig.field + ':\'' + b.key + '\'' };
})
});
});
};
return ElasticToQueryResponse;
}();
exports.default = ElasticToQueryResponse;
module.exports = exports['default'];