我目前在构建正确的 Elasticsearch 查询时遇到问题。目标是实现具有以下要求的过滤机制
- 我自己的帖子(userId 与当前用户的 userId 匹配)应该始终显示,无论 hiddenUntil 条件如何。
- 只有当 hiddenUntil 字段小于或等于当前时间时,才应显示其他用户的帖子(userId 与当前用户的 userId 不匹配)。
在 SQL 中,这可以使用 OR 条件直接实现,如下所示:
SELECT *
FROM posts
WHERE userId = 'my_user_id'
OR (userId != 'my_user_id' AND hiddenUntil <= CURRENT_TIMESTAMP);
我怎样才能编写与 SQL 运行相同的弹性搜索查询?
{
"query": {
"bool": {
"filter": [
{
"term": { "userId": "my_user_id" }
},
{
"bool": {
"must": [
{ "range": { "hiddenUntil": { "lte": 1728291700750 } } }
],
"must_not": [
{ "term": { "userId": "my_user_id" } }
]
}
}
]
}
}
}