本文讨论ES的自定义排序的两种实现形式:基于groovy脚本的自定义排序和基于native script的自定义排序。
1. 基于Groovy脚本的自定义排序
ES的排序脚本必须放在config/scripts下面,ES能够自动发现这些脚本并提供对外使用, 例如编写脚本calculate-score.groovy
log(_score*2)+my_modifier
脚本中my_modifier是搜索请求中的参数,_score是ES计算得到的文档分数。发起搜索请求时指定用calculate-score排序
curl -XPOST localhost:9200/_search -d '{
"query": {
"function_score": {
"query": {
"match": {
"body": "foo"
}
},
"functions": [
{
"script_score": {
"lang": "groovy",
"script_file": "calculate-score",
"params": {
"my_modifier": 8
}
}
}
]
}
}}'
在上面的请求指定了my_modifier的值为8,