-
Notifications
You must be signed in to change notification settings - Fork 51
/
backup_index.js
108 lines (89 loc) · 3.06 KB
/
backup_index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
Backup Index
This script will export an index, including records, settings, rules and synonyms to the current directory.
It can be used in conjunction with restore.js to backup and restore an index to an application.
*/
// Install the API client: https://www.algolia.com/doc/api-client/getting-started/install/javascript/?client=javascript
const algoliasearch = require("algoliasearch");
const dotenv = require("dotenv");
dotenv.config();
// Get your Algolia Application ID and (admin) API key from the dashboard: https://www.algolia.com/account/api-keys
// and choose a name for your index. Add these environment variables to a `.env` file:
const ALGOLIA_APP_ID = process.env.ALGOLIA_APP_ID;
const ALGOLIA_API_KEY = process.env.ALGOLIA_API_KEY;
const ALGOLIA_INDEX_NAME = process.env.ALGOLIA_INDEX_NAME;
// Start the API client
// https://www.algolia.com/doc/api-client/getting-started/instantiate-client-index/
const client = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_API_KEY);
// Create an index (or connect to it, if an index with the name `ALGOLIA_INDEX_NAME` already exists)
// https://www.algolia.com/doc/api-client/getting-started/instantiate-client-index/#initialize-an-index
const index = client.initIndex(ALGOLIA_INDEX_NAME);
// Requiring fs module in which writeFile function is defined.
const fs = require("fs");
let records = [],
settings = [],
rules = [],
synonyms = [];
(async () => {
// retrieve all records from index
console.log(`Retrieving records...`);
try {
await index.browseObjects({
batch: (batch) => {
records = records.concat(batch);
}
});
console.log(`${records.length} records retrieved`);
console.log(`Retrieving settings...`);
// retrieve all index settings
settings = await index.getSettings().then();
console.log(`settings retrieved`);
console.log(`Retrieving rules...`);
// retrieve all rules for index
await index
.browseRules({
batch: (batch) => {
rules = rules.concat(batch);
}
});
console.log(`${rules.length} rules retrieved`);
console.log(`Retrieving synonyms...`);
// retrieve all synonyms for index
await index
.browseSynonyms({
batch: (batch) => {
synonyms = synonyms.concat(batch);
},
});
console.log(`${synonyms.length} synonyms retrieved`);
} catch (error) {
console.log(`Error retrieving data ${error.message}`);
}
// write json files to current directory
function createJson(data, name) {
if (data) {
fs.writeFile(
`${ALGOLIA_INDEX_NAME}_${name}.json`,
JSON.stringify(data),
(err) => {
if (err) throw err;
}
);
} else
(error) => {
console.log(`Error writing files: ${error.message}`);
};
}
try {
let name = "records";
createJson(records, name);
name = "settings";
createJson(settings, name);
name = "rules";
createJson(rules, name);
name = "synonyms";
createJson(synonyms, name);
} catch (error) {
console.log(`Error exporting data ${error.message}`);
}
})();