當(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》)