我如何让 `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 ,然后应该查询似乎有效果,但我还是需要排序。所以我的问题是如何让 sort
和 bool => should
查询协同工作? IE。按 updated_at
排序,但也将 stock_sum = 0
保留在底部 ?
在同一个 should
子句中使用 match_all
和 constant_score
查询,并先按 _score
按 asc
排序,然后按 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
}
}
]
}
}
}
我有以下获取所有产品的查询,我想要实现的是保持缺货产品 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 ,然后应该查询似乎有效果,但我还是需要排序。所以我的问题是如何让 sort
和 bool => should
查询协同工作? IE。按 updated_at
排序,但也将 stock_sum = 0
保留在底部 ?
在同一个 should
子句中使用 match_all
和 constant_score
查询,并先按 _score
按 asc
排序,然后按 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
}
}
]
}
}
}