Data Migrations for ElacticSearch

Vue Storefront uses ElasticSearch as a primary data store. We're using Redis as cache layer and Kue for queue processing.

Although all of these data stores are basically schema-free, some mappings and meta data should be used for setting ES indices and so forth.

Vue storefront uses data migration mechanism based on node-migrate.

Migration tool

We use node-migrate which is pre-configured with npm. So we're using the following alias:

npm run migrate

which runs the migrations against migrations folder.

How to add new migration?

You can add a new migration by simply adding a file to migrations directory (not recommended) or using command line tool:

npm run migrate create name-of-my-migration

The tool automatically generates the file under migrations folder.

Examples

The example migrations shows how to manipulate on products and mappings. Let's take a look at the mapping modification:

// Migration scripts use: https://github.com/tj/node-migrate
'use strict';

let config = require('config');
let common = require('./.common');

module.exports.up = function(next) {
  // example of adding a field to the schema
  // other examples: https://stackoverflow.com/questions/22325708/elasticsearch-create-index-with-mappings-using-javascript,
  common.db.indices
    .putMapping({
      index: config.elasticsearch.indices[0],
      type: 'product',
      body: {
        properties: {
          slug: { type: 'string' }, // add slug field
          suggest: {
            type: 'completion',
            analyzer: 'simple',
            search_analyzer: 'simple',
          },
        },
      },
    })
    .then(res => {
      console.dir(res, { depth: null, colors: true });
      next();
    });
};

module.exports.down = function(next) {
  next();
};

... and that's it 😃