elasticsearch,Mysql,elasticsearch" /> elasticsearch,Mysql,elasticsearch" />

Mysql 使用Elasticsearch 5按特定值排序或排序

Mysql 使用Elasticsearch 5按特定值排序或排序,mysql,elasticsearch,Mysql,elasticsearch,试图找出如何对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" :

试图找出如何对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”排序的方式将排序器阵列中的所有SKU推到了最后

如果在sortOrder中颠倒SKU的顺序并对其进行一些计算,它将正确排序。不过有点老套。我很想知道是否有更好的方法可以让任何人想到

{
    "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"
                    }
                }
            ]
        }
    }
}

实际上,最初的查询确实起到了一定的作用,只是我用“asc”排序的方式将排序器数组中的所有SKU推到了最后

如果在sortOrder中颠倒SKU的顺序并对其进行一些计算,它将正确排序。不过有点老套。我很想知道是否有更好的方法可以让任何人想到

{
    "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"
                    }
                }
            ]
        }
    }
}

这个插件做了你需要的这个插件做了你需要的