Elasticsearch使用篇 – 查询排序

前言

Elasticsearch 查询默认按照分值由大到小进行排序。

分值计算基于 BM25 算法。

Elasticsearch排序

影响排序的方式

可以使用 boost 对字段加权,从而影响排序结果。

GET kibana_sample_data_logs/_search
{
	"track_total_hits": true,
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "message": {
              "query": "elasticsearch",
              "boost": 2
            }
          }
        },
        {
          "match": {
            "message": {
              "query": "beats",
              "boost": 1
            }
          }
        }
      ]
    }
  }
}

可以使用 script_score 查询指定分值,从而影响排序结果

GET kibana_sample_data_logs/_search
{
  "track_total_hits": true,
  "query": {
    "script_score": {
      "query": {
        "match": {
          "message": "elasticsearch"
        }
      },
      "script": {
        "source": """
          _score * 2
        """
      }
    }
  }
}

sort排序

对指定字段进行排序,对应的 doc_values 参数需要设置为 true。而 doc_values 参数在创建索引时,默认为 true,即启用。如果字段不需要排序,可以设置为 false。值得注意的是,text 类型的字段对应的 doc_values 参数默认为 false。

PUT kibana_sample_data_logs_values
{
  "mappings": {
    "properties": {
      "bytes": {
        "type": "integer",
        "doc_values": false
      }
    }
  }
}
POST _reindex
{
  "source": {
    "index": "kibana_sample_data_logs"
  },
  "dest": {
    "index": "kibana_sample_data_logs_values"
  }
}
GET kibana_sample_data_logs_values/_search
{
	"track_total_hits": true,
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "message": {
              "query": "elasticsearch"
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "bytes": {
        "order": "desc"
      }
    }
  ]
}

上述查询会抛出异常。

sort 支持多字段排序。先按照第一个字段排序,然后按照下一个字段排序。

GET kibana_sample_data_logs/_search
{
  "track_total_hits": true, 
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    },
    {
      "response.keyword": {
        "order": "desc"
      }
    },
    {
      "bytes": {
        "order": "desc"
      }
    },
    "_score"
  ]
}
  • track_scores:指定是否追踪评分。默认 false,即在使用 sort 排序时,默认不计算评分。

  • order

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/dd3157d163.html