【发布时间】:2020-09-30 00:02:31
【问题描述】:
我有一个存储课程详细信息的索引(为简洁起见,我截断了一些属性):
{
"settings": {
"index": {
"number_of_replicas": "1",
"number_of_shards": "1"
}
},
"aliases": {
"course": {
}
},
"mappings": {
"properties": {
"name": {
"type": "text"
},
"id": {
"type": "integer"
},
"max_per_user": {
"type": "integer"
}
}
}
}
这里的 max_per_user 是用户可以完成课程的次数。允许用户多次通过课程但不超过课程的 max_per_user 我想跟踪用户与课程的互动。我创建了以下索引来跟踪交互事件。 event_type_id 代表一种交互方式
{
"settings": {
"index": {
"number_of_replicas": "1",
"number_of_shards": "1"
}
},
"aliases": {
"course_events": {
}
},
"mappings": {
"properties": {
"user_progress": {
"dynamic": "true",
"properties": {
"current_count": {
"type": "integer"
},
"user_id": {
"type": "integer"
},
"events": {
"dynamic": "true",
"properties": {
"event_type_id": {
"type": "integer"
},
"event_timestamp": {
"type": "date",
"format": "strict_date_time"
}
}
}
}
},
"created_at": {
"type": "date",
"format": "strict_date_time"
},
"course_id": {
"type": "integer"
}
}
}
}
current_count 是用户完成整个课程的次数
现在,当我在课程索引上运行搜索时,我还希望能够传入 user_id 并仅获取给定用户的 current_count 小于课程的 max_per_user 的课程
我对课程索引的搜索查询是这样的(为简洁起见,截断了一些过滤器)。这个查询是在用户搜索课程时执行的,所以基本上在执行这个时我会有user_id。
{
"sort": [
{
"id": "desc"
}
],
"query": {
"bool": {
"filter": [
{
"range": {
"end_date": {
"gte": "2020-09-28T12:27:55.884Z"
}
}
},
{
"range": {
"start_date": {
"lte": "2020-09-28T12:27:55.884Z"
}
}
}
],
"must": [
{
"term": {
"is_active": true
}
}
]
}
}
}
我不确定如何构建我的搜索查询,以便能够过滤掉给定 user_id 已达到 max_per_user 的课程。
【问题讨论】:
标签: elasticsearch elasticsearch-dsl