什么是script语言
script语言是es提供的一种支持自定义编程的用于复杂查询的脚本语言,主要类型有painless、expressions等。
需求描述
实际业务场景需要将某字段等于某值的排在前面,其他数据靠后。
比如:
雇员属性:name-名称,price-价值
价值 == 100的雇员排名在前,其他数据按照价值倒序排名。
技术简介
根据需求我们可以用es的script语法,在script里面进行表达式解析,最后进行排序。
案例实战
为保证测试用例以及es语法可见,我们用kibana进行脚本演示
1、创建雇员索引
PUT employ
PUT employ/_mapping
{
"properties":{
"name":{
"type":"keyword"
},
"price":{
"type":"long"
}
}
}
2、新增雇员测试数据
#雇员数据
PUT employ/_doc/1
{
"name":"zhangsan",
"price":123
}
PUT employ/_doc/2
{
"name":"lisi",
"price":315
}
PUT employ/_doc/3
{
"name":"wangwu",
"price":100
}
3、查询测试数据
GET employ/_search
{
}
4、运用es sort script语法进行查询
表达式:价值 == 100 的数据排在最前面,然后根据价值倒序进行其他数据排序。
#价值为100的排在前面,后面的按照价值倒序
#如果表达式比较时间则需要转化 .value.toInstant().toEpochMilli()
#如果表达式比较字符也需要转换 .value.toString()
#也就是说表达式两端的类型要一致,如果比较long型数据最好用字符串进行比较
GET employ/_search
{
"query": {
"bool": {
}
},
"sort": [
{
"_script":{
"script":{
"source": "doc['price'].value == 100 ? 1 : 0"
},
"type":"number",
"order": "desc"
}
},{
"price":{
"order": "desc"
}
}
]
}
5、测试结果:文章来源:https://www.toymoban.com/news/detail-515082.html
文章来源地址https://www.toymoban.com/news/detail-515082.html
到了这里,关于elasticsearch sort script实现字段值等于某值排名靠前的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!