UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

73 lines (62 loc) 1.8 kB
const _ = require('lodash'); let Scanner = function (client, {index, type} = {}) { if (!index) throw new Error('Expected index'); if (!type) throw new Error('Expected type'); if (!client) throw new Error('Expected client'); this.client = client; this.index = index; this.type = type; }; Scanner.prototype.scanAndMap = function (searchString, options, mapFn) { let scrollId; let body; let allResults = { hits: [], total: 0 }; const opts = _.defaults(options || {}, { pageSize: 100, docCount: 1000 }); if (searchString) { body = { query: { simple_query_string: { query: searchString + '*', fields: ['title^3', 'description'], default_operator: 'AND' } } }; } else { body = { query: {match_all: {}}}; } return new Promise((resolve, reject) => { const getMoreUntilDone = (error, response) => { const scanAllResults = opts.docCount === Infinity; allResults.total = scanAllResults ? response.hits.total : Math.min(response.hits.total, opts.docCount); scrollId = response._scroll_id || scrollId; let hits = response.hits.hits .slice(0, allResults.total - allResults.hits.length); if (mapFn) hits = hits.map(mapFn); allResults.hits = allResults.hits.concat(hits); const collectedAllResults = allResults.total === allResults.hits.length; if (collectedAllResults) { resolve(allResults); } else { this.client.scroll({ scrollId }, getMoreUntilDone); } }; this.client.search({ index: this.index, type: this.type, size: opts.pageSize, body, searchType: 'scan', scroll: '1m' }, getMoreUntilDone); }); }; export default Scanner;