1、elasticsearch 对 text 类型进行排序
排序的过程实质是对字段原始内容排序的过程,这个过程中倒排索引无法发挥作用,需要用到正排索引,也就是通过文档id 和字段可以快速得到字段原始内容。
es对此提供了2中实现方式:
- fielddata默认禁用;
- doc values 默认启用,除了text 类型。
fielddata 和 doc values对比如下:
对比 | fielddata | docvalues |
---|---|---|
创建时机 | 搜索时即时创建 | 索引时创建,与倒排索引创建时机一致 |
创建位置 | jvm heap | 磁盘 |
优点 | 不会占用额外的磁盘资源 | 不会占用 heap 内存 |
缺点 | 文档过多时,即时创建会花费过多时间,占用过多的heap 内存 | 减慢索引的速度(io过多),占用额外的磁盘资源 |
fielddata 介绍:
- fielddata默认是关闭的。
- 此时字符串是按照分词后的term 排序,往往结果很难符合预期;
- 一般是在对分词做聚合分析的时候开启。
- 语法如下:
PUT testindex/_mapping
{
"doc": {
"properties": {
"name": {
"type": &