UNPKG

@attivio/suit

Version:

Attivio SUIT, the Search UI Toolkit, is a library for creating search clients for searching the Attivio platform.

87 lines (68 loc) 2.81 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 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 QueryResponse(); 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 SearchDocument.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 SearchFacet.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; }(); export { ElasticToQueryResponse as default };