如何强制“terms”查询的顺序?

win*_*ter 3 elasticsearch

我有一个简单的terms查询,其中定义了 ID 列表。我的目标是按照输入数组中定义的顺序获取结果。如何实现这一目标?

{
    query: {
        terms: {
            _id: ["12", "34", "6", "22"]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sag*_*tel 5

您可以使用基于脚本的排序。您可以提供排序顺序,脚本将根据该顺序对您的响应进行排序。

POST index/_search
{
  "query": {
    "terms": {
      "id": ["12", "34", "6", "22"]
    }
  },
  "sort": {
    "_script": {
      "type": "number",
      "script": {
        "inline": "params.sortOrder.indexOf(doc['id'].value)",
        "params": {
          "sortOrder": ["12", "34", "6", "22"]
        }
      },
      "order": "asc"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)