python - 通过字段上的自定义比较功能对 ElasticSearch 结果进行排序
问题描述
如果我想从弹性排序的评级中获取驱动程序数据,评级可能是["good", "ok", "bad"]
,如何编写可以帮助我在考虑好>好>坏的情况下按排序顺序获取数据的查询
Ex排序的响应列表:
[{
"name": "driver1",
"rating": "good"
},
{
"name": "driver3",
"rating": "good"
},
{
"name": "driver2",
"rating": "ok"
},
{
"name": "driver4",
"rating": "bad"
}]
解决方案
要根据索引中的字段更改分数值,您可以使用脚本分数查询,您的查询应如下例所示:
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 官方文档。
推荐阅读
- algorithm - 计算多个子区间(在较大区间内)的总持续时间低于 X 的日期
- ios - 使用 Metal 渲染时,Apple 如何在 UIKit 中渲染自定义线宽
- python - 标点符号特殊序列 \p 在正则表达式中失败
- laravel - 在 laravel 5.6 中表单输入旧值
- python - python在数据框中移动数据
- python - Python 3.6 导入 cv2 库
- python - Python 从字符串中获取参数
- python - 如何在组合之前移动图像(相对于另一个图像)?
- spring - 使用 Spring Boot 2 的 Docker 堆栈“配置”
- node.js - Angular SSL 证书和密钥——Ng 服务根目录