Elasticsearch:最后按具有空值的字段排序
Elasticsearch: sort by field with null values last
我想按 name
排序,但在结果末尾保留包含空值或缺少 price
数据的条目。
我试过:
sort: {
sorting.name: {
order: "asc"
},
prices.minprice.price: {
missing: "_last"
}
}
但这仅按名称排序。
为此,我们可以使用自定义函数分数 (which is faster than custom script based sorting according to elasticsearch documentation)。当缺少价格时,数值将 return 0.
然后我们先按分数排序,分成缺少价格数据的部分和没有缺少价格数据的部分,然后根据名称对这两个部分中的每一个进行排序。
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {"match_all": {}},
"script_score": {
"script": "doc['price'].value == 0 ? 0 : 1"
}
}
},
"sort": [
"_score",
"name"
]
}
这对我有用,
"sort":[
{
"_script":{
"type":"number",
"script":{
"lang":"painless",
"source":"return params._source.store[0].sku_available_unit == 0 ? 0 : 1;"
},
"order":"desc"
}
}
]
实际上你可以使用 missing
命令。
我想按 name
排序,但在结果末尾保留包含空值或缺少 price
数据的条目。
我试过:
sort: {
sorting.name: {
order: "asc"
},
prices.minprice.price: {
missing: "_last"
}
}
但这仅按名称排序。
为此,我们可以使用自定义函数分数 (which is faster than custom script based sorting according to elasticsearch documentation)。当缺少价格时,数值将 return 0.
然后我们先按分数排序,分成缺少价格数据的部分和没有缺少价格数据的部分,然后根据名称对这两个部分中的每一个进行排序。
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {"match_all": {}},
"script_score": {
"script": "doc['price'].value == 0 ? 0 : 1"
}
}
},
"sort": [
"_score",
"name"
]
}
这对我有用,
"sort":[
{
"_script":{
"type":"number",
"script":{
"lang":"painless",
"source":"return params._source.store[0].sku_available_unit == 0 ? 0 : 1;"
},
"order":"desc"
}
}
]
实际上你可以使用 missing
命令。