diff --git a/bin/sync-algolia.js b/bin/sync-algolia.js index 8e4ac84..fba71d0 100644 --- a/bin/sync-algolia.js +++ b/bin/sync-algolia.js @@ -21,23 +21,53 @@ function syncAlgolia() { const index = client.initIndex('icons'); const indexTmp = client.initIndex('icons_tmp'); - indexTmp.setSettings({ - searchableAttributes: ['unordered(name)', 'unordered(tags)'], - customRanking: ['asc(name)'], - }); + console.log( + "Copying target index's settings, synonyms and rules into temporary index...", + ); + scopedCopyIndex(client, index.indexName, indexTmp.indexName) + .then(() => { + const objects = Object.keys(icons).map(name => ({ + name, + tags: tags[name] || [], + })); - const records = Object.keys(icons).map(name => ({ - name, - tags: tags[name] || [], - })); + console.log('Adding objects to the temporary index...'); + return addObjects(indexTmp, objects); + }) + .then(() => { + console.log('Moving temporary index to target index...'); + return moveIndex(client, indexTmp.indexName, index.indexName); + }); +} - console.log('Pushing data to the temporary index...'); - indexTmp.addObjects(records, err => { - if (err) throw err; - }); - - console.log('Moving temporary index to target index...'); - client.moveIndex(indexTmp.indexName, index.indexName, err => { - if (err) throw err; +function scopedCopyIndex( + client, + indexNameSrc, + indexNameDest, + scope = ['settings', 'synonyms', 'rules'], +) { + return new Promise((resolve, reject) => { + client.copyIndex(indexNameSrc, indexNameDest, scope, (error, contents) => { + if (error) reject(error); + resolve(contents); + }); + }); +} + +function addObjects(index, objects) { + return new Promise((resolve, reject) => { + index.addObjects(objects, (error, contents) => { + if (error) reject(error); + resolve(contents); + }); + }); +} + +function moveIndex(client, indexNameSrc, indexNameDest) { + return new Promise((resolve, reject) => { + client.moveIndex(indexNameSrc, indexNameDest, (error, contents) => { + if (error) reject(error); + resolve(contents); + }); }); }