【发布时间】:2020-10-07 09:26:28
【问题描述】:
我想从弹性搜索中过滤和获取数据。我尝试过 日期直方图聚合,但它没有解决我的目的。 我有这样的数据:
[
{
"id":1,
"title":"Sample news",
"date":"2020-09-17",
"regulation":[
{
"id":1,
"name":"sample name",
"date":"2020-09-17"
},
{
"id":2,
"name":"sample name 1",
"date":"2020-09-18"
}
]
},
{
"id":2,
"title":"Sample news 1",
"date":"2020-09-17",
"regulation":[
{
"id":1,
"name":"sample name",
"date":"2020-09-18"
},
{
"id":2,
"name":"sample name 1",
"date":"2020-09-17"
}
]
}
]
我想过滤并获取如下数据:
year: {
month: {
day: {
news: int,
regulations: int,
}
}
}
这意味着每天的新闻和法规都算作日期层次结构。 我可以实现这样的数据:
"2020-09-17" : {
"key_as_string" : "2020-09-17",
"key" : 1600300800000,
"doc_count" : 1
},
"2020-09-18" : {
"key_as_string" : "2020-09-18",
"key" : 1600387200000,
"doc_count" : 0
},
"2020-09-19" : {
"key_as_string" : "2020-09-19",
"key" : 1600473600000,
"doc_count" : 0
},
使用
GET /news/_search?size=0
{
"aggs": {
"news_over_time": {
"date_histogram": {
"field": "date",
"calendar_interval": "day",
"keyed": true,
"format": "yyy-MM-dd"
}
}
}
}
但这并没有解决我的目的。 如何使用 Elasticsearch 和 Elasticsearch dsl 来做到这一点
预期响应: 预期响应:
2020: {
09: {
17: {
news: 2,
regulation: 2
},
18: {
news: 0,
regulation: 2
}
}
}
【问题讨论】:
-
你能说得更清楚一点吗?对于上述示例,您将得到什么最终响应?特定日期的新闻数量?
-
'regulation' 是一个嵌套对象或多值字段。你能分享一下索引映射吗?是否也需要考虑法规日期还是仅新闻日期?
-
@CoderL 我已经更新了我的预期回复。请看一看。
-
@SahilGupta 规则是一个嵌套对象,规则日期也需要计算特定日期的规则。
标签: elasticsearch elasticsearch-dsl elasticsearch-dsl-py