2014-11-24 14 views
5

如果多個文檔具有相同的分數,是否可以實現對elasticsearch搜索結果的可靠分頁?當結果具有相同的分數時在Elasticsearch中進行尋呼

我正在試驗elasticsearch中的自定義評分。我嘗試的許多評分表達式都會產生許多文檔具有相同分數的結果集。每次嘗試時,它們似乎都以相同的順序出現,但可以保證嗎?

AFAIU它不能,特別是在羣集中有多個分片時不行。具有相同得分的文件wrt。一個給定的elasticsearch查詢以隨機的,非確定性的順序,可以在相同的查詢的調用之間發生變化,即使底層數據庫不改變返回(並且因此尋呼是不可靠的),除非以下情況之一成立:

  1. 我使用function_score來保證得分對於每個文檔都是唯一的(例如通過使用唯一編號字段)。
  2. 我使用sort並確保排序定義了總順序(例如,如果其他條件相同,則使用唯一字段作爲回退)。

任何人都可以確認(也許指向一些參考)?

如果我知道只有一個沒有任何副本的主碎片(請參閱其他類似查詢:Inconsistent ordering of results across primary /replica for documents with equivalent score),是否會發生此變化?例如。如果我保證有一個分片並且在同一個查詢的兩個調用之間的數據庫中沒有變化,那麼該查詢將以相同的順序返回結果?

什麼是其他選擇(如果有的話)?

回答

1

我最終在可能發生相同分數的情況下使用其他排序 - 例如按產品類別搜索。這種額外的排序可以是id,創建日期或類似的。該設置是2個服務器,3個分片和1個副本。

+1

這是推薦的方法,首先按'_score'排序,然後再按一些輔助打破領域。 – 2015-04-16 03:16:40

+0

@LeeH你如何添加tiebreaker與_id? – Lion789 2016-10-25 05:24:49

相關問題