一 序
本文屬於極客時間Elasticsearch核心技術與實戰學習筆記系列。
二 排序
- ES 默認採用相關性算分對結果進行降序排序
- 可以通過設置 sorting 參數,自行設定排序
- 如果不指定_score, 算分爲 null
指定order_date 排序,所以打分是null.
2.1 多字段進行排序
- 組合多個條件
- 優先考慮寫在前面的排序
- 支持對相關性算分進行排序
因爲是全部查詢,所以算分都是1.
2.2 對 Text 類型排序
對Text字段進行排序,默認會報錯。
#打開 text的 fielddata
再次執行查詢:
3 排序的過程
排序是針對字段原始內容進行的。倒排索引無法發揮作用
需要用到正排索引。通過文檔 ID 和字段快速得到字段原始內容
ES 有 2 種實現方式
- Fieldata
- Doc Values (列式存儲,對 Text 類型無效)
就是上面的例子,text 需要打開fielddata.
3.1 Doc Values vs. Field Data
- fileddata默認關閉,可以通過 Mapping 設置打開。修改設置後,即時生效,無需縮減索引
- 其他字段類型不支持,支持對 Text 進行設定
上面的例子中,我們可以動態的打開fileddata,但是實際情況下不建議打開,對全文本排序沒有很大的意義。
3.2 關閉 Doc Values
- 默認啓動,可以通過 Mapping 設置關閉
- 增減索引速度 / 減少磁盤空間
- 如果重新打開,需要重建索引
- 什麼時候需要關閉
- 明確不需要做排序及聚合分析