我已经按以下简化结构对数据进行了分区(考虑数组中的对象是单独的文档)。实际的文件数量将超过1000万:
/products-2019.01.01
[
{
"id": 1,
"name": "Product1",
"price": 15
},
{
"id": 2,
"name": "Product2",
"price": 10
},
{
"id": 3,
"name": "Product3",
"price": 10
}
]
/products-2019.01.02
[
{
"id": 1,
"name": "Product1",
"price": 10
},
{
"id": 2,
"name": "Product2",
"price": 12
},
{
"id": 3,
"name": "Product3",
"price": 10
}
]
/products-2019.01.03
[
{
"id": 1,
"name": "Product1",
"price": 10
},
{
"id": 2,
"name": "Product2",
"price": 10
},
{
"id": 3,
"name": "Product3",
"price": 13
}
]
我的用例是我需要比较两天之间的价格,在这种情况下,可能是:
- 2019.01.01 vs 2019.01.02
- 2019.01.01 vs 2019.01.03
- 2019.01.02 vs 2019.01.03
显然,每日数据越多,可能的组合越多。
如果我必须将2019.01.01与2019.01.03进行比较,则查询必须返回2,因为产品1和产品3的价格在这些索引之间有所不同。
我正在寻求帮助来构建这样的查询并向任何其他数据模型建议开放。
我认为您可以在这种情况下按ID和价格汇总,并添加min_doc_count
以过滤出两个索引中的位置
GET logs1,logs2/_search
{
"size": 0,
"aggs": {
"by_product": {
"terms": {
"script": {
"inline": "doc.id+'_'+doc.price"
},
"min_doc_count": 2
}
}
}
}