日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es 吗 查询必须有sort_ElasticSearch DSL之From/Size,Sort

發布時間:2025/3/12 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es 吗 查询必须有sort_ElasticSearch DSL之From/Size,Sort 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從這篇文章開始,我們要進入DSL的學習。

使用url搜索僅僅是個開始,ES還提供帶有查詢DSL的請求體用于更高級的搜索。在這些類型的搜索中有大量可選項,可以混合和匹配不同的選項以獲得所需的結果。

DSL還能根據查詢子句的過濾和查詢上下文,使用篩選器的子句以布爾形式測試Document是否匹配篩選器。過濾器通常也比查詢快,但是查詢也可以根據Document與查詢的匹配程度來計算score。

From/Size

分頁可以說是最常用的一個功能了,在ES里通過使用From/Size實現結果分頁。from參數定義了要獲取的第一個結果的偏移量,size參數允許配置要返回的最多命中數量。

雖然可以將from和size設置為請求參數,但它們也可以在搜索體中設置。從默認值到0,大小默認值10:

GET http://localhost:9200/orders/_search

{

"from" : 0, "size" : 20,

"query" : {

"term" : { "name" : "phone" }

}

}

Sort

與分頁幾乎綁在一起的還有排序,ES允許在特定字段上添加一個或多個排序,每種排序也可以倒序。常見的asc和desc就不多說了,ES支持按數組或多值字段排序。mode選項控制選擇哪個數組值來排序它所屬的Document。mode選項可以有以下值:

1.min:選擇最小值。

2.max:選擇最大值。

3.sum:使用所有值的和作為排序值(只適用于基于數字的數組字段)。

4.avg:使用所有值的平均值作為排序值(只適用于基于數字的數組字段)。

5.median:使用所有值的中值作為排序值(只適用于基于數字的數組字段)。

在下面的示例中,字段price每個文檔有多個價格。在這種情況下,結果命中將根據每個文檔的平均價格按價格升序排序。

{

"query" : {

"term" : { "goods" : "phone" }

},

"sort" : [

{"price" : {"order" : "asc", "mode" : "avg"}}

]

}

ES還支持對位于一個或多個嵌套對象中的字段進行排序。

嵌套字段支持排序有一個嵌套排序選項,具有以下屬性:

1.path:定義要排序的嵌套對象。實際的sort字段必須是嵌套對象中的一個直接字段。當按嵌套字段排序時,該字段是必須要有的。

2.filter:嵌套路徑中的內部對象與之匹配的篩選器,以便通過排序來考慮其字段值。常見的情況是在嵌套的過濾器或查詢中重復查詢/過濾器。

3.nested:與頂級嵌套相同,但適用于當前嵌套對象中的另一個嵌套路徑。

在下面的示例中,case是一個類型嵌套的字段。需要指定嵌套路徑;否則,ES就不知道需要在哪個嵌套級別上捕獲排序值。

{

"query" : {

"term" : { "product" : "chocolate" }

},

"sort" : [

{

"case.price" : {

"mode" : "avg",

"order" : "asc",

"nested": {

"path": "case",

"filter": {

"term" : { "case.color" : "grey" }

}

}

}

}

]

}

地理位置排序

通過_geo_distance可以實現按照按照距離長短進行排序,下面的例子就是按照pin.location作為目標地點按照距離從近到遠:

{

"sort" : [

{

"_geo_distance" : {

"pin.location" : [-170, 340],

"unit" : "km",

"mode" : "min",

"distance_type" : "arc",

"ignore_unmapped": true,

"order" : "asc"

}

}

],

"query" : {

"term" : { "seller" : "phone" }

}

}

其中有幾個參數需要解釋下:

1.distance_type:計算距離的方式。可以是arc(弧),也可以是plane(平面,速度快,但在長距離和接近極點時不精確)。

2.mode:如果一個字段有幾個地理點,默認情況下,升序排序時考慮的距離最短,降序排序時考慮的距離最長。支持的值是最小值、最大值、中值和平均值。

3.ignore_unmapped:是否應將未映射字段視為缺失值。將其設置為true相當于在字段排序中指定unmapped_type。默認為false(未映射字段導致搜索失敗)。

4.unit:單位。默認是m(米)。

這篇文章主要就介紹了這兩個參數。ES當然不只有這兩種,只是這兩種應該是最常用的,如果各位有疑問歡迎留言。

版權所屬,如需轉載,請注明出處:搜閑魚

總結

以上是生活随笔為你收集整理的es 吗 查询必须有sort_ElasticSearch DSL之From/Size,Sort的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。