我使用以下简化的结构将数据按天分区(考虑数组中的对象是单独的文档)。实际文档数量将超过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
}
]
我的用例是,我需要比较两个确切日期之间的价格,在这种情况下,它可能是:
vs 2019.01.02
显然,每日数据越多,可能的组合就越多。
如果我必须比较2019.01.01和2019.01.03,查询必须返回2,因为产品1和产品3的价格在这两个索引之间是不同的。
我正在寻找帮助来构建这样的查询,并对任何其他数据模型建议持开放态度。
发布于 2019-03-22 06:52:54
我认为在这种情况下,您可以根据id和价格进行聚合,然后添加min_doc_count
来过滤掉两个索引中不同的部分
GET logs1,logs2/_search
{
"size": 0,
"aggs": {
"by_product": {
"terms": {
"script": {
"inline": "doc.id+'_'+doc.price"
},
"min_doc_count": 2
}
}
}
}
https://stackoverflow.com/questions/55286966
复制相似问题