首页 > 解决方案 > 通过字段上的自定义比较功能对 ElasticSearch 结果进行排序

问题描述

如果我想从弹性排序的评级中获取驱动程序数据,评级可能是["good", "ok", "bad"],如何编写可以帮助我在考虑好>好>坏的情况下按排序顺序获取数据的查询

Ex排序的响应列表:

[{
    "name": "driver1",
    "rating": "good"
},
{
    "name": "driver3",
    "rating": "good"
},
{
    "name": "driver2",
    "rating": "ok"
},
{
    "name": "driver4",
    "rating": "bad"
}]

标签: pythonsortingelasticsearchelasticsearch-dsl

解决方案


要根据索引中的字段更改分数值,您可以使用脚本分数查询,您的查询应如下例所示:

GET /my-index-2/_search
{
  "query": {
    "script_score": {
      "query": {
        "match_all":{}
      },
      "script": {
        "source": "if (doc['rating.keyword'].value == 'good'){2} else if(doc['rating.keyword'].value == 'ok') {1} else if(doc['rating.keyword'].value == 'bad') {0}"
      }
    }
  }
}

有关脚本分数查询的更多信息,您可以在此处查看 Elastic 官方文档。


推荐阅读