我有两个表:用户和文章,现在我想得到一个用户列表,按每个人的文章与日期的范围。
设置elasticsearch索引:
PUT /users/_mapping
{
"properties":{
"id": {
"type": "long"
},
"create_time": {
"type": "date",
"format": "yyyy-MM-dd"
},
"articles":{
"type":"nested",
"properties": {
"id": {
"type": "long"
},
"content": {
"type": "text"
},
"create_time": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
}
字符串
数据是这样的:
{
"id":1,
"create_time": "2023-12-20",
"articles": [
{"id": 21, "content":"1111", "create_time": "2023-12-20"},
{"id": 22, "content":"1111", "create_time": "2023-12-21"},
{"id": 23, "content":"1111", "create_time": "2023-12-21"},
{"id": 24, "content":"1111", "create_time": "2023-12-22"},
{"id": 24, "content":"1111", "create_time": "2023-12-23"}
]
}
{
"id":2,
"create_time": "2023-12-20",
"articles": [
{"id": 21, "content":"1111", "create_time": "2023-12-20"},
{"id": 22, "content":"1111", "create_time": "2023-12-21"},
{"id": 23, "content":"1111", "create_time": "2023-12-22"},
{"id": 24, "content":"1111", "create_time": "2023-12-22"},
{"id": 24, "content":"1111", "create_time": "2023-12-22"},
{"id": 25, "content":"1111", "create_time": "2024-12-31"}
]
}
{
"id":3,
"create_time": "2023-12-20",
"articles": [
{"id": 21, "content":"1111", "create_time": "2023-12-20"},
{"id": 22, "content":"1111", "create_time": "2023-12-21"},
{"id": 23, "content":"1111", "create_time": "2023-12-21"},
{"id": 24, "content":"1111", "create_time": "2023-12-21"},
{"id": 24, "content":"1111", "create_time": "2023-12-22"},
{"id": 25, "content":"1111", "create_time": "2024-12-31"}
]
}
{
"id":4,
"create_time": "2023-12-10",
"articles": [
{"id": 21, "content":"1111", "create_time": "2023-12-10"},
{"id": 22, "content":"1111", "create_time": "2023-12-11"},
{"id": 23, "content":"1111", "create_time": "2023-12-21"},
{"id": 24, "content":"1111", "create_time": "2023-12-21"},
{"id": 24, "content":"1111", "create_time": "2023-12-21"},
{"id": 25, "content":"1111", "create_time": "2024-12-31"}
]
}
型
如果客户发布日期:2023-12-20和2023-12-21将获得:在2023-12-20和2023-12-21之间创建_time的用户;按在2023-12-20和2023-12-21之间创建_time的文章号排序;
因此,列表数据:id:3,4篇文章id:1,3篇文章id:2,2篇文章
没有id:4,因为create_time不在2023-12-20和2023-12-21之间
我的查询是这样的:
GET /users/_search
{
"query": {
"bool": {
"must": [{
"range": {
"create_time": {
"gte": "2023-12-20",
"lte": "2023-12-21"
}
}
}]
}
},
"aggs": {
"articles": {
"nested": {
"path": "articles"
},
"aggs": {
"articles": {
"filter": {
"bool": {
"must": [{
"range": {
"articles.create_time": {
"gte": "2023-12-20",
"lte": "2023-12-21",
"format": "yyyy-MM-dd"
}
}
}]
}
}
}
}
}
},
"size": 0
}
型
1条答案
按热度按时间wkftcu5l1#
您需要使用reverse_nested查询。以下是您更新的查询:
字符串
的数据