UNPKG

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