UNPKG

@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
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 };