elasticsearch如何实现terms顺序排序
我使用的是elasticsearch7.17.3版本,通过terms筛选fileId为固定值的内容,现在需要按terms传入的内容顺序排序应该如何实现呢?
如:现在执行下面的语句返回内容默认是按fileId正序排列的,为1,2,3,4,5,6的顺序,但是我想要返回内容按1,3,2,6,4,5 的顺序返回,这种应该如何实现呢?
POST file_vector/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"fileId": [
"1","3","2","6","4","5"
]
}
}
]
}
}
}
根据GPT
可以使用function_score查询实现按传入顺序排序。具体实现如下:
POST file_vector/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"fileId": [
"1","3","2","6","4","5"
]
}
}
]
}
},
"sort": [
{
"_script": {
"type": "number",
"order": "asc",
"script": {
"source": "params.order.indexOf(doc['fileId'].value.toString())",
"params": {
"order": [
"1","3","2","6","4","5"
]
}
}
}
}
]
}
其中,sort字段使用_script来自定义排序规则。脚本中使用了params.order.indexOf(doc['fileId'].value.toString())来获取当前文档fileId在传入顺序中的位置,从而实现按传入顺序排序。