如何为elasticsearch生成记录?我想生成至少100万条记录来测试内存大小。
const now = new Date()
const startOfDay = new Date(now.getFullYear(), now.getMonth(), Math.random(now.getDate()))
const timestamp = startOfDay / 1000
const randomRecords = Array(10000000).fill(timestamp)
randomRecords.forEach((record, i) => {
clientTest.index({
index: 'test',
type: 'test',
id: '1',
body: {
[record]: `${record}${i}`,
},
}).then(function (resp) {
logger.silly('Pushing of data completed', resp)
return resp
}, function (err) {
console.trace(err.message)
})
})
答案 0 :(得分:1)
对于数组中的每条记录,您需要设置id=1
。这意味着,对于每次迭代,您都会覆盖id = 1的记录,最后保存一条记录。
所以,你有两个解决方案:
如果您还有其他问题,请告诉我。
答案 1 :(得分:0)
使用时应使用迭代器i
来增加id
字段。如果在索引时在elasticsearch中使用相同的id,则每次都会覆盖该字段。
变化:
id: '1',
id: i,
这应该可行,但我建议使用bulk api
。因此,而不是每次迭代索引。因此,请在交付之前进行批量索引收集,然后在一个请求中对其进行批量索引。
答案 2 :(得分:0)
实际上,它对我也有用。
export const pushTest = (message, type) => new Promise(async resolve => {
try {
let client = createClient()
await client.index({
index: type.toLowerCase(),
type,
body: message,
},
(error, response) => {
logger.silly('Pushing of data completed', response)
resolve(response)
})
} catch (e) {
logger.error(e)
}
})
for (let index = 0; index < 100; index++) {
let messageTest = {
'timestamp': {seconds: timestamp, nanos: 467737400},
type: randomItem(alarmTypes),
location: `Room_${Math.floor(Math.random() * 100)}`,
zone: `Zone_${Math.floor(Math.random() * 100)}`,
personName: 'person name',
personRoom: `Room_${Math.floor(Math.random() * 100)}`,
pageSize: 10,
cancelTimestamp: {seconds: timestamp, nanos: 467737400},
cancelPerson: 'person name',
cancelLocation: `Room_${Math.floor(Math.random() * 100)}`,
responseTime: {seconds: Math.floor(Math.random() * 1000000), nanos: 321549100},
}
pushTest(messageTest, 'Call')
}