普通排序
GET /my-index-000001(索引名)/_search
{
"sort": [
{
"post_date": {
"order": "asc"
}
},
"user",
{
"name": "desc"
},
{
"age": "desc"
},
"_score"
],
"query": {
"term": {
"user": "kimchy"
}
}
}
當使用評分排序時,ES默認按照
倒序desc
排序,按照其他任意屬性排序時默認為正序asc
排序
MODE
ES支持按照數組形式或者多種數值類型的屬性進行排序。其中
mode
屬性就是控制按照該多數值中具體哪一個屬性進行排序。
- min:按照多個數值中的最小數值進行排序
- max:按照多個數值中的最大數值進行排序
- sum:將多個數值求和后進行排序(只適用於數字類型的數組)
- avg:將多個數值求平均值后進行排序(只適用於數字類型的數組)
- median:取多個數值的中位數進行排序(只適用於數字類型的數組)
按照升序排序時mode的默認值為min,按照降序排序時mode的默認值為max
mode的使用
在下面的例子中,屬性price在每個文檔中都有多個數值,這個查詢的結果會根據每個文檔中價格的平均值按正序asc排序
PUT /my-index-000001/_doc/1?refresh
{
"product": "chocolate",
"price": [20, 4]
}
POST /_search
{
"query": {
"term": {
"product": "chocolate"
}
},
"sort": [
{
"price": {
"order": "asc",
"mode": "avg"
}
}
]
}
numeric_type
數字類型的值可以通過numeric_type
轉成另一種類型的值。numeric_type
可接受以下類型的值 ["double", "long", "date", "date_nanos"
] 並且可用於跨多個數據流或索引的搜索
numeric_type使用案例
創建兩個索引
PUT /index_double
{
"mappings": {
"properties": {
"field": { "type": "double" }
}
}
}
PUT /index_long
{
"mappings": {
"properties": {
"field": { "type": "long" }
}
}
}
兩個索引中field
屬性一個時double類型,一個是long類型;默認情況下無法使用filed
屬性同時對兩個索引進行排序。但是使用了numeric_type
后便可以
POST /index_long,index_double/_search
{
"sort" : [
{
"field" : {
"numeric_type" : "double"
}
}
]
}
在上面這個例子中,index_long
中的field
從long轉換成double以與index-double
索引生成的值兼容。同樣,也可以將float
字段轉成long
類型,但這種情況下數值會向下取整(負數則為向上取整)