Elasticsearch排序

當(dāng)你發(fā)送請(qǐng)求至elasticsearch,返回文檔默認(rèn)按文檔得分降序排序,這是通常我們想要了,然而,有時(shí)候我們希望能改變這種排序方式

歡迎訪問本人博客:http://wangnan.tech

下面的例子就容易做到:

該查詢會(huì)返回所有在title字段上至少命中一個(gè)詞項(xiàng)的文檔,并且基于section數(shù)據(jù)排序

也可以通過添加查詢sort部分的missing屬性為那些section字段缺失的文檔定制排序行為

基于多值字段的排序

某些文檔的release-dates字段里面儲(chǔ)存了多個(gè)電影上映日期(同一部電影在不同國家的上映日期不同)我們可以構(gòu)造查詢請(qǐng)求:

例子中es將基于每個(gè)文檔的release_dates字段的最小值進(jìn)行排序
mode參數(shù)可以設(shè)置為以上值:

  • min 按照該字段最小值排序
  • max 按照該字段最大值進(jìn)行排序
  • avg 按照多個(gè)字段平均值排序
  • sum 按照字段總和進(jìn)行排序

后面兩個(gè)選項(xiàng)只對(duì)數(shù)值類型有效

基于多值geo字段的排序

es提供了基于多維坐標(biāo)系數(shù)據(jù)的排序,我們通過一個(gè)實(shí)例了解這種類型的排序
例如,要查找特點(diǎn)國家里離自己最近的一個(gè)機(jī)構(gòu)
我們使用下面的這個(gè)映射:

查詢?nèi)鐖D:

查詢結(jié)果:

我們可以看到,返回結(jié)果包含這個(gè)值:“sort”:[0.0]這是因?yàn)榉祷匚臋n的地理坐標(biāo)和查詢中的坐標(biāo)精確匹配
還可以設(shè)置mode屬性為max,min,avg
例如avg代表:此時(shí)基于字段中的地理位置坐標(biāo)與查詢坐標(biāo)的距離的均值排序

基于嵌套對(duì)象的排序

繼續(xù)嵌套對(duì)象的排序,對(duì)以下兩種情形都適用

  • 適用了顯式嵌套映射(在映射中配置type=“nested”)的文檔
  • 使用了對(duì)象類型的文檔
    兩者之間的一些細(xì)微區(qū)別需要注意
    假設(shè)我們索引如下數(shù)據(jù):

查詢:

查詢返回結(jié)果按照嵌套對(duì)象的usert字段最小值降序
如果將子文檔視為一種數(shù)據(jù)類型,則可以將查詢簡化為如下形式:

當(dāng)我們使用對(duì)象類型時(shí),可以簡化查詢,這是因?yàn)檎麄€(gè)對(duì)象結(jié)構(gòu)被當(dāng)成一個(gè)lucene文檔進(jìn)行儲(chǔ)存
有些時(shí)候,使用nested_path屬性會(huì)更加便捷
按照下面的方式構(gòu)造查詢:

我們也可以使用nested_filter參數(shù),改參數(shù)只對(duì)嵌套文檔有效,利用這個(gè)參數(shù),我們可以在排序前就已經(jīng)通過一個(gè)過濾器在檢索期排除了某些文檔,而不是檢索結(jié)果文檔集中過濾它們
(注:內(nèi)容整理自《深入理解Elasticsearch》)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評(píng)論 18 399
  • 默認(rèn)按照_score排序,如果指定排序字段,_score字段不再經(jīng)過計(jì)算,按照指定字段進(jìn)行排序。但是如果指定字段是...
    jacksu在簡書閱讀 4,928評(píng)論 4 3
  • 感謝曾經(jīng)陪伴過我的人,沒有你們的心機(jī)我也不會(huì)成長的這么快。人生如戲,笑笑就過去了。
    cctadeye閱讀 286評(píng)論 0 1
  • 飭荼靈閱讀 168評(píng)論 0 0

友情鏈接更多精彩內(nèi)容