我正在尝试根据商品的SKU对商品进行分组/堆叠。
当前,如果从高到低排序,则以10美元或1美元的价格出售的商品会首先显示1美元的商品(因为它也以10美元的价格出售,因此会放在课程的前面)。排序仅应针对特定的SKU对lowest_price
进行排序。
有没有办法让我可以根据每个SKU的最低价格进行排序,并且每个SKU仅返回1个单品?
如果崩溃的结果可以用作排序的变量,则可以解决此问题,但我无法找出其工作原理。
我的项目对象如下:
{
itemId: String,
sku: String,
price: Number
}
这是我的查询
let itemsPerPage = 25;
let searchQuery = {
from: itemsPerPage * page,
size: itemsPerPage,
_source: ['itemId'],
sort: [{'sale.price': 'desc'}],
query: {
bool: {
must: [],
must_not: []
}
},
collapse: {
field: 'sku',
inner_hits: [{
name: 'lowest_price',
size: 1,
_source: ['itemId'],
sort: [{
'price': 'asc'
}]
}
],
}
};
答案 0 :(得分:0)
您需要在折叠下方添加排序。 例如:
GET /test/_search
{
"query": {
"function_score": {
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"match" : {
"job_status" : "SUCCESS"
}
}
]
}
}
}
}
}
},
"collapse": {
"field": "run_id.keyword"
},
"sort": [
{
"@timestamp": {
"order": "desc"
}
}
]
}
这可以解决您的问题。