Skip to content

Commit a305b0f

Browse files
add script for updating es mappings and reindexing data
1 parent 6c89714 commit a305b0f

File tree

2 files changed

+93
-1
lines changed

2 files changed

+93
-1
lines changed

src/init-es.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,15 @@ const initES = async () => {
3232
body.mappings[config.get('ES.ES_TYPE')] = {
3333
properties: {
3434
id: { type: 'keyword' }
35-
}
35+
},
36+
dynamic_templates: [{
37+
metadata: {
38+
path_match: 'metadata.*',
39+
mapping: {
40+
type: 'text'
41+
}
42+
}
43+
}]
3644
}
3745

3846
await client.indices.create({

src/scripts/update-es-mappings.js

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
const config = require('config')
2+
const logger = require('../common/logger')
3+
const helper = require('../common/helper')
4+
5+
const esClient = helper.getESClient()
6+
7+
function sleep (ms) {
8+
return new Promise((resolve) => {
9+
setTimeout(resolve, ms)
10+
})
11+
}
12+
13+
function createIndex (indexName) {
14+
const body = { mappings: {} }
15+
body.mappings[config.get('ES.ES_TYPE')] = {
16+
properties: {
17+
id: { type: 'keyword' }
18+
},
19+
dynamic_templates: [{
20+
metadata: {
21+
path_match: 'metadata.*',
22+
mapping: {
23+
type: 'text'
24+
}
25+
}
26+
}]
27+
}
28+
29+
return esClient.indices.create({
30+
index: indexName,
31+
body
32+
})
33+
}
34+
35+
async function updateMappings () {
36+
let indexName = config.get('ES.ES_INDEX')
37+
let newIndexName = `${indexName}_tmp_dont_use_for_querying`
38+
39+
await createIndex(newIndexName)
40+
await sleep(500)
41+
logger.info(`Reindexing from ${indexName} to ${newIndexName}`)
42+
await esClient.reindex({
43+
body: {
44+
source: { index: indexName },
45+
dest: { index: newIndexName }
46+
},
47+
waitForCompletion: true
48+
})
49+
50+
logger.warn(`Deleting ${indexName}. If script crashes after this point data may be lost and a recreation of index will be required.`)
51+
52+
await esClient.indices.delete({
53+
index: indexName
54+
})
55+
56+
logger.info(`Copying data back into ${indexName}`)
57+
58+
// This should be replaced with cloneIndex after migration to 7.4+
59+
await createIndex(indexName)
60+
await sleep(500)
61+
await esClient.reindex({
62+
body: {
63+
source: { index: newIndexName },
64+
dest: { index: indexName }
65+
},
66+
waitForCompletion: true
67+
})
68+
69+
logger.info(`Removing ${newIndexName} index`)
70+
71+
await esClient.indices.delete({
72+
index: newIndexName
73+
})
74+
}
75+
76+
updateMappings()
77+
.then(() => {
78+
logger.info('Done')
79+
process.exit()
80+
})
81+
.catch((err) => {
82+
logger.logFullError(err)
83+
process.exit(1)
84+
})

0 commit comments

Comments
 (0)