试图找出如何对elasticsearch结果进行排序,以便具有特定值的字段始终首先显示。在这种情况下,我希望特定的SKU在显示类别页面时首先显示(我使用bool查询生成类别页面的弹性搜索结果)。使用Elasticsearch对特定值进行排序或排序5
如果我试图用MySQL来做到这一点,我会使用case语句:
ORDER BY CASE sku
WHEN 'sku1' then 1 WHEN 'sku2' then 2 WHEN 'sku3' then 3 ELSE 4 END
此查询执行:
{
"sort" : [
{
"_script": {
"type": "number",
"script": {
"inline" : "params.sortOrder.indexOf(doc['skuid_text'].value)",
"params": {
"sortOrder": [
"SKUID1",
"SKUID2",
"SKUID3"
]
}
},
"order": "asc"
}
}
],
"query" :{
"bool" : {
"must" : [
{
"term" : {
"category_codes" : "CATEGORY1"
}
}
]
}
}
}
但它返回 “-1” 作为排序值为所有记录,例如:
sort": [
-1
]
注意:'skuid_text'是我分析为“关键字”类型的SKU字段。我已经尝试过doc ['skuid_text'] .value和doc ['skuid_text']并且我已经验证了“sortOrder”数组中的SKU肯定包含在结果集中。
我缺少什么?或者,有没有一种完全不同的方法来解决这个问题?