我有以下关于获取所有产品的查询。我想要实现的是保持缺货产品,即底部带有stock_sum
=0
的产品:
{
"sort": [
{
"updated_at": {
"order": "desc"
}
}
],
"size": 10,
"from": 0,
"query": {
"bool": {
"should": [
{
"range": {
"stock_sum": {
"gte": 1,
"boost": 5
}
}
}
]
}
}
}
但在上面的查询中,sort
似乎完全覆盖了should
,我想这就是它应该如何行为的。我尝试了几项措施,将should
更改为must
,在本例中,将缺货产品完全省略(这不是我想要的,我仍然希望将缺货产品放在底部)。
另一种方法是删除排序,然后应该查询似乎有效果,但我同样需要排序。因此,我的问题是如何让sort
和bool => should
查询协同工作?即按updated_at
排序,但同时将stock_sum = 0
留在底部?
1条答案
按热度按时间0yg35tkg1#
在同一个
should
子句中使用match_all
和constant_score
查询,并首先按asc
按_score
排序,然后按desc
按updated_at
排序,这对您的示例应该有效。以下是一个示例查询: