2015-07-28 32 views
1

我已經有彈性搜索文檔和這樣的映射。是否可以通過該字段是否符合條件來對elasticsearch查詢進行排序?

{ 
    "date_added": { 
     "type": "date", 
     "format": "dateOptionalTime" 
    } 
    "expires": { 
     "type": "date", 
     "format": "dateOptionalTime" 
    } 
} 

我想要做的就是查詢雙排序:

1)最新到最舊(這是一個簡單的排序,在這裏沒問題)

2)顯示文件尚未在最前面到期(所以文件的「過期」比現在更大)

在我的迴應中,我希望將文檔分爲兩部分 - 尚未過期的最新到最舊,過期的最新到最舊。

我很努力地創造出可以實現第二部分的排序。我可以按範圍過濾器的結果排序嗎?也許我可以創建一些屬性類似的布爾型字段,它會根據「expires」字段而改變,然後用它進行排序?

回答

1

這看起來像是一個很好的功能評分用例。你可以提到一個函數分數函數來增加文檔的有效期限比現在更長。

{ 
    "query": { 
    "function_score": { 
     "filter": [ 
     { 
      "filter": { 
      "range": { 
       "expires": { 
       "gte": "now" 
       } 
      } 
      }, 
      "boost": 1000 
     } 
     ], 
     "score_mode": "sum", 
     "boost_mode": "sum" 
    } 
    } 
} 

您可以閱讀更多關於它herehere

+0

這很漂亮。我擔心的一件事是它會如何影響我搜索的總體評分(給出的例子非常簡單)。我將閱讀提供的鏈接並檢查其工作原理。 儘管如何對它進行排序呢?不會將排序與date_sort混爲一談(因爲結果之間的分數可能會有所不同)? – user3146472

+0

這不會與排序工作。排序會超過分數並自行排序。如果您想根據輔助字段進行排序,那麼您可以在那裏再添加一個功能。 –

相關問題