您的位置:首页 > 其它

ELK合集持续更新(十一):Elasticsearch关键术语之排序

2020-03-28 19:58 351 查看

Elasticsearch关键术语 系列博文 目的只用来了解概念 ; 其中 涉及到的配置和使用 是为了方便日后使用时查询的

排序

ES搜索结果的排序 默认是按照文档的_score相关性算分 算分高的文档优先展示 搜索时可以指定根据某字段进行排序 (类似 SQL的order by)

本质

  • 排序是针对原始内容进行的 倒排索引无法发挥作用
  • 需要用到正排索引 通过文档ID和字段快速得到字段原始内容

实现排序的两种方式

方式一 设置"doc_values":true 默认

本质

  • DocValues在索引时 和倒排索引一起创建

  • 通过序列化把数据结构持久化到磁盘 我们可以充分利用操作系统的内存 而不是 JVM 的 Heap

  • 当workingset远小于系统的可用内存 系统会自动将 DocValues保存在内存中 使得其读写十分高速

  • 不过 当其远大于可用内存时 操作系统会自动把DocValues写入磁盘

  • 很显然 这样性能会比在内存中差很多 但是它的大小就不再局限于服务器的内存了 如果是使用JVM的Heap来实现那么只能是因为OutOfMemory导致程序崩溃了

作用

  • text类型的字段不能排序

  • 其他类型的字段都可排序 聚合 脚本操作

  • 可避免大量JVM heap占用而导致内存溢出

  • 但 降低索引速度 占用额外磁盘空间

设置关闭

  • 作用

    增加索引速度 减少磁盘空间

  • 但 设置后的字段不能做排序 聚合 脚本操作

  • 设置mapping

    PUT index名/_mapping
    {
    "properties":{
    "字段名":{
    "type":"keyword",
    "doc_values":false
    }
    }
    }
  • 设置重新打开

      需要重建索引
    方式二 设置"fielddata":true 默认flase

    本质

    • 搜索时动态创建

    • 创建位置 JVM heap

    作用

    • text类型的字段可排序

    • 索引速度快 不占用额外磁盘空间

    • 文档过多时 动态创建开销大 占用过多JVM heap 太多字段设置了开启容易outofmemory内存溢出

    设置开启

    • 设置mapping
      PUT kibana_sample_data_ecommerce/_mapping
      {
      "properties":{
      "customer_full_name":{
      "type":"text",
      "fielddata":true,
      "fields":{
      "keyword":{
      "type":"keyword",
      "ignore_above":256
      }
      }
      }
      }
      }

    参考
    阮一名资料
    官方文档
    百度

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    hungry和她的朋友们 发布了25 篇原创文章 · 获赞 0 · 访问量 356 私信 关注
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: