Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata

一 序

  本文属于极客时间Elasticsearch核心技术与实战学习笔记系列。

二 排序    

  • ES 默认采用相关性算分对结果进行降序排序
  • 可以通过设置 sorting 参数,自行设定排序
  • 如果不指定_score, 算分为 null

Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata

指定order_date 排序,所以打分是null.

2.1 多字段进行排序

  • 组合多个条件
  • 优先考虑写在前面的排序
  • 支持对相关性算分进行排序

Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata

因为是全部查询,所以算分都是1.

2.2 对 Text 类型排序

对Text字段进行排序,默认会报错。  Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata

  #打开 text的 fielddata

Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata

再次执行查询: 

Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata

3 排序的过程

排序是针对字段原始内容进行的。倒排索引无法发挥作用
需要用到正排索引。通过文档 ID 和字段快速得到字段原始内容
ES 有 2 种实现方式

  • Fieldata
  • Doc Values (列式存储,对 Text 类型无效)

就是上面的例子,text 需要打开fielddata.

3.1 Doc Values vs. Field Data

  Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata

  • fileddata默认关闭,可以通过 Mapping 设置打开。修改设置后,即时生效,无需缩减索引
  • 其他字段类型不支持,支持对 Text 进行设定

上面的例子中,我们可以动态的打开fileddata,但是实际情况下不建议打开,对全文本排序没有很大的意义。

3.2 关闭 Doc Values   

  • 默认启动,可以通过 Mapping 设置关闭
    • 增减索引速度 / 减少磁盘空间
  • 如果重新打开,需要重建索引
  • 什么时候需要关闭
    • 明确不需要做排序及聚合分析

Elasticsearch核心技术与实战学习笔记 42 | 排序及Doc Values&Fielddata