我有一些索引(有序集)包含按时间戳排序的键名称,这些索引用于搜索目的,例如一个索引apple和一个索引red,apple包含所有引用apple的键名和red所有键引用一件红色的事。
所有这些都按照主键创建的时间戳排序,所以我想用它进行搜索。
对于一个游戏来说,这不是一个问题,我会对苹果进行分页,例如将所有苹果分类到按日期排序的分页范围内,但我的问题是当我想要合并2个字段时。
例如,如果想要所有红苹果,我可以肯定,但我必须使用zunionstore和zrange(太长)或获得所有的2索引来执行基于日期的过滤器,我搜索最快的解决方案这样做。
感谢您阅读:)
答案 0 :(得分:0)
您描述的方法 - let sourceData = [
{
"metric": "Approved",
"rounded_counts": [
{ "2017-11-16 15:10:00": 3 },
{ "2017-11-16 15:11:00": 5 }
]
},
{
"metric": "Approved",
"rounded_counts": [
{ "2017-11-16 15:10:00": 28 },
{ "2017-11-16 15:11:00": 28 }
]
},
{
"metric": "Quarantine",
"rounded_counts": [
{ "2017-11-16 15:10:00": 1 },
{ "2017-11-16 15:11:00": 2 }
]
}
];
let charDataTmp = {}
let chartData = []
//uniqueify
sourceData.forEach(block => {
if (!charDataTmp[block.metric])
{
charDataTmp[block.metric]={rounded_counts:{}}
}
block.rounded_counts.forEach(roundedCount => {
let key = Object.keys(roundedCount)[0]
if (!charDataTmp[block.metric].rounded_counts[key])
{
charDataTmp[block.metric].rounded_counts[key] = 0
}
charDataTmp[block.metric].rounded_counts[key] += roundedCount[key]
})
})
//unfold
Object.keys(charDataTmp).forEach(nameGroup => {
chartData.push({
name: nameGroup,
data: Object.keys(charDataTmp[nameGroup].rounded_counts).map(counts => {
return [
counts,
charDataTmp[nameGroup].rounded_counts[counts]
]
})
})
})
console.log(JSON.stringify(chartData, null, 4))
后跟ZUNIONSTORE
是Redis核心中最有效的方法。或者,您可以使用RediSearch进行robuster索引和搜索功能。