我如何让 `sort` 和 `bool => should` 查询协同工作?

how do i get `sort` and `bool => should` query to work in tandem?

我有以下获取所有产品的查询,我想要实现的是保持缺货产品 I.E.底部带有 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 ,然后应该查询似乎有效果,但我还是需要排序。所以我的问题是如何让 sortbool => should 查询协同工作? IE。按 updated_at 排序,但也将 stock_sum = 0 保留在底部 ?

在同一个 should 子句中使用 match_allconstant_score 查询,并先按 _scoreasc 排序,然后按 updated_at 排序by desc 应该适用于您的示例。这是一个示例查询:

{
  "sort": [
    {
      "_score": {
        "order": "asc"
      }
    },
    {
      "updated_at": {
        "order": "desc"
      }
    }
  ]
  "query": {
    "bool": {
      "should": [
        {
          "match_all": {}
        },
        {
          "constant_score": {
             "filter": {
              "term": {
                "stock_sum": 0
              }
            },
            "boost": 10
          }
        }
      ]
    }
  }
}