elasticsearch - 比较按日期分区的不同索引中的两个弹性搜索文档字段
问题描述
我使用以下简化结构按天对数据进行了分区(将数组中的对象视为单独的文档)。实际文件量将超过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 与 2019.01.02
- 2019.01.01 与 2019.01.03
- 2019.01.02 与 2019.01.03
显然,每日数据越多,可能的组合就越多。
如果我必须将 2019.01.01 与 2019.01.03 进行比较,则查询必须返回 2,因为产品 1 和产品 3 的价格在这些索引之间不同。
我正在寻求帮助来构建这样的查询,并对任何其他数据模型建议持开放态度。
解决方案
我认为您可以在这种情况下按 id 和 price 聚合并添加min_doc_count
以过滤掉两个索引中不同的地方
GET logs1,logs2/_search
{
"size": 0,
"aggs": {
"by_product": {
"terms": {
"script": {
"inline": "doc.id+'_'+doc.price"
},
"min_doc_count": 2
}
}
}
}
推荐阅读
- java - 在弹性搜索中的单个翻转动作中翻转多个别名?
- c++ - 如何编写一个将运算符作为参数并具有默认值的函数?
- python - 如何使用带有 python-flask 的 swagger yaml 将 apikey 添加到 API(创建自己的 API)
- php - 创建一个按钮,以便它可以将 1 更改为 0 或 0 更改为 1
- sql - 使用数据列表填充临时表到最大值
- sql - 带有连接的 Postgres JSON 数组?
- javascript - 带输入其他选项的单选按钮
- android - 在android中的视频录制上添加时间戳
- github - Github - 如何使用 Web 界面创建子模块
- swift - UIdatepicker 背景颜色没有变化,还有一层默认颜色