UNPKG

elasticsearch-tools

Version:

Elasticsearch command line tools for importing, exporting, etc

125 lines (118 loc) 3.54 kB
'use strict'; var helpers = require('./helpers'); var fs = require('fs'); var program = require('commander'); var elasticsearch = require('elasticsearch'); var appInfo = require('../package.json'); var async = require('async'); exports.indicesImport = function(fnName, importKey, alsoInclude, esOptions) { var key; // setup command line options program .version(appInfo.version, '-v, --version') .option('-u, --url <url>', 'the elasticsearch url to connect to') .option('-f, --file <file>', 'the file to read data from'); // add es options for (key in esOptions) { if (esOptions.hasOwnProperty(key)) { program.option( '--' + key + ' <' + key + '>', 'ES OPTION: ' + esOptions[key] ); } } // parse arguments program.parse(process.argv); // validate url and file helpers.validateUrlAndFile(program); // init client var client = new elasticsearch.Client({ hosts: program.url.split(',') }); // build our params object var params = {}; for (key in esOptions) { if (esOptions.hasOwnProperty(key) && program.hasOwnProperty(key)) { params[key] = program[key]; } } // read file, and create indexes / keyValues fs.readFile(program.file, 'utf-8', function(err, contents) { var parsedContent; if (err) { helpers.exit(err); } try { parsedContent = JSON.parse(contents); } catch (err) { helpers.exit('Cannot parse file: ' + err.toString()); } var indexes = Object.keys(parsedContent); var keyValues = []; var created = []; // build our keyValues array indexes.forEach(function(index) { var currentObj = parsedContent[index][importKey]; // loop through properties Object.keys(currentObj).forEach(function(prop) { keyValues.push({ index: index, prop: prop, body: currentObj[prop] }); }); }); console.log('Creating Indexes (if needed):'); async.eachSeries( keyValues, function(mapping, callback) { var prefix = ' [index="' + mapping.index + '"]'; if (created.indexOf(mapping.index) >= 0) { callback(); } else { created.push(mapping.index); client.indices.exists({ index: mapping.index }, function( error, response ) { if (err) { callback(err); } else if (response) { console.log(prefix + ' - exists'); callback(); } else { console.log(prefix + ' - creating'); client.indices.create({ index: mapping.index }, callback); } }); } }, function(err) { if (err) { helpers.exit(err); } console.log('Creating ' + importKey + ':'); async.eachSeries( keyValues, function(mapping, callback) { // put mapping console.log( ' [index="' + mapping.index + '", prop="' + mapping.prop + '"]' ); params.index = mapping.index; if (typeof alsoInclude === 'string') { params[alsoInclude] = mapping.prop; } params.body = mapping.body; client.indices[fnName](params, callback); }, function(err) { if (err) { helpers.exit(err); } console.log('Done!'); process.exit(); } ); } ); }); };