@attivio/suit
Version:
Attivio SUIT, the Search UI Toolkit, is a library for creating search clients for searching the Attivio platform.
104 lines (85 loc) • 3.04 kB
JavaScript
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
import QueryResponse from '../api/QueryResponse';
import SearchDocument from '../api/SearchDocument';
import SearchFacet from '../api/SearchFacet';
/**
* Convert the response from a call to the Solr engine
* into an Attivio QueryResponse so that it can be
* processed by the Search UI.
*/
var SolrToQueryResponse = function () {
function SolrToQueryResponse() {
_classCallCheck(this, SolrToQueryResponse);
}
/**
* Do the conversion.
*
* @param json the JSON returned from the call
* @param customOptions the custom options defined in the configuration
*/
SolrToQueryResponse.convert = function convert(json, customOptions) {
var result = new QueryResponse();
if (json.responseHeader) {
result.totalTime = json.responseHeader.QTime;
}
if (json.response) {
result.totalHits = json.response.numFound;
}
if (json.response.docs.length > 0) {
result.documents = SolrToQueryResponse.getSolrDocuments(json.response.docs, customOptions);
}
if (json.facets) {
result.facets = SolrToQueryResponse.getSolrFacets(json.facets, customOptions);
}
return result;
};
/**
* Turn non-array field values into arrays.
*/
SolrToQueryResponse.wrapIfNotArray = function wrapIfNotArray(v) {
return Array.isArray(v) ? v : [v];
};
SolrToQueryResponse.getSolrDocuments = function getSolrDocuments(documents, customOptions) {
return documents.map(function (doc) {
var mapp = customOptions.mappings;
var fields = {};
Object.keys(mapp).forEach(function (k) {
if (mapp[k] && doc[mapp[k]]) {
fields[k] = SolrToQueryResponse.wrapIfNotArray(doc[mapp[k]]);
}
});
if (customOptions.customId && customOptions.customId.length > 0) {
fields['.id'] = [doc[customOptions.customId]];
} else {
fields['.id'] = [doc.id];
}
fields['.score'] = [''];
return SearchDocument.fromJson({ fields: fields });
});
};
SolrToQueryResponse.getSolrFacets = function getSolrFacets(facets, customOptions) {
var countlessFacets = Object.assign({}, facets);
if (countlessFacets.count) {
delete countlessFacets.count;
}
return Object.keys(countlessFacets).map(function (field) {
var facetConfig = customOptions.facets.find(function (f) {
return f.field === field;
}) || {};
return SearchFacet.fromJson({
name: facetConfig.field || field,
field: facetConfig.field || field,
label: facetConfig.displayName || field,
buckets: facets[field].buckets.map(function (b) {
return {
value: b.val,
count: b.count,
filter: facetConfig.field + ':\'' + b.val + '\''
};
})
});
});
};
return SolrToQueryResponse;
}();
export { SolrToQueryResponse as default };