我正在以类似
的格式接收数据 {
name:"index_name",
status: "good",
datapoints: [{
paramType: "ABC",
batch: [{
time:"timestamp1<epoch in sec>",
value: "123"
},{
time:"timestamp2<epoch in sec>",
value: "123"
}]
},
{
paramType: "XYZ",
batch: [{
time:"timestamp1<epoch in sec>",
value: "123"
},{
time:"timestamp2<epoch in sec>",
value: "124"
}]
}]
}
我想以一种可以基于timerange
,status
或paramType
进行查询的方式将数据存储到elasticsearch中。
如here所述,我可以将datapoints
或batch
定义为嵌套数据类型,这将允许在数组内索引对象。
我可以想到的另一种方法是将结构分成单独的文档。例如
{
name : "index_name",
status: "good",
paramType:"ABC",
time:"timestamp<epoch in sec>",
value: "123"
}
哪种方法最有效?
如果我选择第二种方式,我知道batch
数组和10-15 paramsType
数组中可能有〜1000个元素,这意味着将生成〜15k文档和15k * 5个字段(= 75K)键值对将在索引中重复吗?
Here解释了使用嵌套但未提供与性能相关的统计信息的优缺点。就我而言,内部对象不会有任何更新。因此,不确定哪个会更好。另外,我有两个嵌套对象,所以我想知道如何查询是否使用嵌套在一个时间范围之间获取数据?
答案 0 :(得分:1)
平面结构比嵌套结构的性能更好。与术语查询相比,嵌套查询要慢一些;同样在索引时-内部一个嵌套文档被表示为一堆文档;只是它们被索引在同一块中。
只要满足您的要求-第二种方法效果更好。