一 序
本文属于极客时间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 设置关闭
- 增减索引速度 / 减少磁盘空间
- 如果重新打开,需要重建索引
- 什么时候需要关闭
- 明确不需要做排序及聚合分析