gpt4 book ai didi

mysql - 使用 Elasticsearch 5 按特定值排序或排序

转载 作者:行者123 更新时间:2023-11-30 22:08:43 26 4
gpt4 key购买 nike

试图弄清楚如何对 elasticsearch 结果进行排序,以便具有特定值的字段始终显示在第一位。在这种情况下,我希望在显示类别页面时首先显示特定的 SKU(我使用 bool 查询为类别页面生成 elasticsearch 结果)。

如果我试图用 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 肯定包含在结果集中。

我错过了什么?或者,是否有一种完全不同的方法来解决这个问题?

最佳答案

实际上原始查询确实有点工作,只是我用“asc”订购的方式将 sortOrder 数组中的所有 skus 推到最后。

如果您在 sortOrder 中反转 skus 的顺序并对其进行一些数学计算,它将正确排序。不过有点hack-y。我很想知道是否有人能想到更好的方法。

{
"sort" : [
{
"_script": {
"type": "number",
"script": {
"inline" : "(9999)-params.sortOrder.indexOf(doc['skuid_text'].value)",
"params": {
"sortOrder": [
"SKUID3",
"SKUID2",
"SKUID1"
]
}
},
"order": "asc"
}
}
],
"query" :{
"bool" : {
"must" : [
{
"term" : {
"category_codes" : "CATEGORY1"
}
}
]
}
}
}

关于mysql - 使用 Elasticsearch 5 按特定值排序或排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com