sort排序

264 阅读1分钟

如果没有指定sort选项,最后返回匹配文档的时候,按照_score取值的降序来排序

排序时用keyword、数字类型等字段,多值和分析字段上不可以。

也可以使用脚本。

POST /get-together/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
       "reviews": {
        "order": "asc"
      }
    },
    {
       "date": {
        "order": "asc"
      }
    },
    {
       "_score": {
        "order": "desc"
      }
    }
  ]
}
POST http://192.168.94.151:9200/secisland/_doc/_search
​
{
  "sort": [
    {
      "date": {
        "order": "desc"
      }
    },
    {
      "title": {
        "order": "asc"
      }
    }
  ]
}

or

{
  "sort": {
    "date": {
      "order": "desc"
    },
    "title": {
      "order": "asc"
    }
  }
}

or

{
  "sort": {
    "date": "desc",
    "title": "asc"
  }
}

当一个字段的内容有多个值的时候,系统支持一些计算进行排序。包括min、max、sum、avg、mediam。例如下面请求标识price有多个值:

{
  "sort": {
    "date": {
      "order": "desc",
      "mode": "avg"
    }
  }
}

脚本排序,尽管这个功能很强大,使用function_score更合适。所有相关性的变化都是集中在单独的一个地方(查询中),而不是在排序功能里。如果脚本比较复杂,可以看看是否能把值抽成一个字段,然后对这个字段排序。

​
POST /get-together/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "description": "elasticsearch"
          }
        },
        {
          "exists": {
            "field": "reviews"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "_script": {
        "script": "doc['reviews'].value",
        "type": "number",
        "order": "desc"
      }
    }
  ]
}

\