ES:定制搜索结果的排序规则

1、默认排序规则

默认情况下,是按照_score降序排序的

GET /_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "author_id": 110
        }
      }
    }
  }
}
GET /_search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "author_id": 110
        }
      }
    }
  }
}

2、定制排序规则

GET /company/employee/_search 
{
  "query": {
    "constant_score": {
      "filter": {
        "range": {
          "age": {
            "gte": 30
          }
        }
      }
    }
  },
  "sort": [
    {
      "join_date": {
        "order": "asc"
      }
    }
  ]
}

3、field索引两次来解决字符串排序问题

如果对一个string field进行排序,结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了
通常解决方案是,将一个string field建立两次索引,一个分词,用来进行搜索;一个不分词,用来进行排序

ES:定制搜索结果的排序规则_第1张图片

GET /website/article/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "title.raw": {
        "order": "desc"
      }
    }
  ]
}

ES:定制搜索结果的排序规则_第2张图片

你可能感兴趣的:(Elasticsearch)