-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimportDataToElastic.ts
More file actions
89 lines (83 loc) · 2.5 KB
/
importDataToElastic.ts
File metadata and controls
89 lines (83 loc) · 2.5 KB
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
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import crypto from 'node:crypto';
import httpStatusCodes from 'http-status-codes';
import { Client, estypes } from '@elastic/elasticsearch';
import { elasticConfigPath } from '../src/common/constants';
import { ConfigType } from '../src/common/config';
import controlData from './controlElasticsearchData.json';
import geotextData from './geotextElasticsearchData.json';
const main = async (config: ConfigType): Promise<void> => {
const controlElasticConfig = config.get(`${elasticConfigPath}.control`);
const geotextElasticConfig = config.get(`${elasticConfigPath}.geotext`);
const controlClient = new Client({ ...controlElasticConfig });
const geotextClient = new Client({ ...geotextElasticConfig });
for (const { client, indices } of [
{
client: controlClient,
indices: [controlElasticConfig.index] as string[],
},
{
client: geotextClient,
indices: Object.values(geotextElasticConfig.index as { [key: string]: string }),
},
]) {
for (const index of indices) {
try {
await client.indices.delete({ index });
} catch (error) {
if ((error as estypes.ErrorCause).meta.statusCode !== httpStatusCodes.NOT_FOUND) {
throw error;
}
console.error(error);
}
}
}
for (const { client, index, key } of [
{
client: controlClient,
index: controlElasticConfig.index,
key: 'geometry',
},
{
client: geotextClient,
index: (geotextElasticConfig.index as { [key: string]: string }).geotext,
key: 'geo_json',
},
{
client: geotextClient,
index: (geotextElasticConfig.index as { [key: string]: string }).hierarchies,
key: 'geo_json',
},
]) {
await client.indices.create({
index: index,
body: {
mappings: {
properties: {
[key]: {
type: 'geo_shape',
},
},
},
},
});
}
for (const item of controlData) {
await controlClient.index({
index: controlElasticConfig.index,
id: crypto.randomUUID(),
body: item._source,
});
}
for (const item of geotextData) {
await geotextClient.index({
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
index: (geotextElasticConfig.index as { [key: string]: string })[item._index] as string,
id: crypto.randomUUID(),
body: {
...item._source,
},
});
}
};
export default main;