骨力 2023-06-15 12:13 采纳率: 50%
浏览 51
已结题

elasticsearch如何实现按terms指定顺序排序

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"  
            ]
          } 
        }
      ]  
    }  
  }
}
  • 写回答

1条回答 默认 最新

  • 小杰911 2023-06-17 13:23
    关注

    根据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在传入顺序中的位置,从而实现按传入顺序排序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月29日
  • 已采纳回答 6月21日
  • 创建了问题 6月15日