Skip to content

Commit b99abad

Browse files
author
James Cori
committed
Merge branch 'update-mappings' into develop
2 parents 4c85539 + 0a8e99e commit b99abad

File tree

3 files changed

+127
-2
lines changed

3 files changed

+127
-2
lines changed

config/default.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ module.exports = {
4040
API_VERSION: process.env.ES_API_VERSION || '6.8',
4141
ES_INDEX: process.env.ES_INDEX || 'challenge',
4242
ES_TYPE: process.env.ES_TYPE || '_doc', // ES 6.x accepts only 1 Type per index and it's mandatory to define it
43-
ES_REFRESH: process.env.ES_REFRESH || 'true'
43+
ES_REFRESH: process.env.ES_REFRESH || 'true',
44+
TEMP_REINDEXING: process.env.TEMP_REINDEXING || true // if true, it won't delete the existing index when reindexing data
4445
},
4546

4647
// in bytes

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: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
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+
name: {
19+
type: 'keyword',
20+
normalizer: 'custom_sort_normalizer'
21+
}
22+
},
23+
dynamic_templates: [{
24+
metadata: {
25+
path_match: 'metadata.*',
26+
mapping: {
27+
type: 'text'
28+
}
29+
}
30+
}]
31+
}
32+
body.settings = {
33+
analysis: {
34+
normalizer: {
35+
custom_sort_normalizer: {
36+
type: 'custom',
37+
char_filter: [],
38+
filter: ['lowercase', 'asciifolding']
39+
}
40+
}
41+
}
42+
}
43+
44+
return esClient.indices.create({
45+
index: indexName,
46+
body
47+
})
48+
}
49+
50+
async function updateMappings () {
51+
const tempReindexing = config.get('ES.TEMP_REINDEXING')
52+
let indexName = config.get('ES.ES_INDEX')
53+
let newIndexName = `${indexName}_tmp_dont_use_for_querying`
54+
55+
if (tempReindexing) {
56+
try {
57+
logger.info(`Attemp to remove temporary index ${newIndexName}`)
58+
await esClient.indices.delete({
59+
index: newIndexName
60+
})
61+
await sleep(500)
62+
} catch (e) {
63+
logger.info(`Index ${newIndexName} does not exist`)
64+
}
65+
}
66+
67+
await createIndex(newIndexName)
68+
await sleep(500)
69+
logger.info(`Reindexing from ${indexName} to ${newIndexName}`)
70+
await esClient.reindex({
71+
body: {
72+
source: { index: indexName },
73+
dest: { index: newIndexName }
74+
},
75+
waitForCompletion: true
76+
})
77+
78+
if (tempReindexing) {
79+
return
80+
}
81+
82+
logger.warn(`Deleting ${indexName}. If script crashes after this point data may be lost and a recreation of index will be required.`)
83+
84+
await esClient.indices.delete({
85+
index: indexName
86+
})
87+
88+
logger.info(`Copying data back into ${indexName}`)
89+
90+
// This should be replaced with cloneIndex after migration to 7.4+
91+
await createIndex(indexName)
92+
await sleep(500)
93+
await esClient.reindex({
94+
body: {
95+
source: { index: newIndexName },
96+
dest: { index: indexName }
97+
},
98+
waitForCompletion: true
99+
})
100+
101+
logger.info(`Removing ${newIndexName} index`)
102+
103+
await esClient.indices.delete({
104+
index: newIndexName
105+
})
106+
}
107+
108+
updateMappings()
109+
.then(() => {
110+
logger.info('Done')
111+
process.exit()
112+
})
113+
.catch((err) => {
114+
logger.logFullError(err)
115+
process.exit(1)
116+
})

0 commit comments

Comments
 (0)