Elasticsearch 核心技术与实战 学习笔记

分片的设定

对于生产环境中分片的设定,需要提前做好容量规划

  • 分片数设置过小

    1. 导致后续无法增加节点实现水品扩展
    2. 单个分片的数据量太大,导致数据重新分配耗时
  • 分片数设置过大,7.0开始,默认主分片设置成1,解决了 over—sharding的问题

    1. 影响搜索结果的相关性打分,影响统计结果的准确性
    2. 单个节点上过多的分片,会导致资源浪费,同时也会影响性能

倒排索引

Elasticsearch 的 JSON文档中的每个字段,都有自己的倒排索引可以指定对某些字段不做索引。

  • 优点:节省存储空间
  • 缺点:字段无法被搜索

搜索的相关性

搜索是用户和搜索引擎的对话。

用户关心的是搜索结果的相关性。

  • 是否可以找到所有相关的内容
  • 有多少不相关的内容被返回了
  • 文档的打分是否合理
  • 结合业务需求,平衡结果排名

衡量相关性

  • Precision(查准率)— 尽可能返回较少的无关文档
  • Recall(查全率)— 尽量返回较多的相关文档
  • Ranking — 是否能够按照相关度进行排序?

能否更改Mapping的字段类型

  1. 新增加字段
  • Dynamic设为true时,一旦有新增字段的文档写入, Mapping也同时被更新
  • Dynamic设为false, Mapping不会被更新,新增字段的数据无法被索引(无法被搜索),但是信息会出现在_source中
  • Dynamic设置成Strict,文档写入失败
  1. 对已有字段,一旦已经有数据写入,就不再支持修改字段定义
  • Lucene实现的倒排索引,一旦生成后,就不允许修改如果希望改变字段类型,必须Reindex API,重建索引

如果修改了字段的数据类型,会导致已被索引的数据无法被搜索。但是如果是增加新的字段,就不会有这样的影响。

控制Dynamic Mapping

  • 当 dynamic被设置成false时候,存在新增字段的数据写入,该数据可以被索引,但是新增字段被丢弃。
  • 当设置成Strict 模式时候,数据写入直接出错。

自定义Mapping的建议

为了减少输入的工作量,减少出错概率,可以依照以下步骤

  1. 创建一个临时的index,写入一些样本数据
  2. 通过访问 Mapping API获得该临时文件的动态 Mapping 定义
  3. 修改后用,使用该配置创建你的索引
  4. 删除临时索引

Index Options

四种不同级别的 Index Options 配置,可以控制倒排索引记录的内容

  • docs - 记录 doc id O
  • freqs - 记录 doc id和 term frequencies O
  • positions - 记录 doc id/term frequencies /term position O
  • offsets - doc id/ term frequencies / term posistion / character offects

Text 类型默认记录 postions,其他默认为 docs。记录内容越多,占用存储空间越大

Index Template

Index Templates - 帮助你设定Mappings和Settings,并按照一定的规则, 自动匹配到新创建的索引之上。

  • 模版仅在一个索引被新创建时,才会产生作用。
  • 修改模版不会影响已创建的索引。
  • 你可以设定多个索引模版,这些设置会被“merge”在一起你可以指定“order”的数值,控制“merging”的过程。

当一个索引被新创建时:

  • 应用 Elasticsearch 默认的 settings 和 mappings
  • 应用order数值低的Index Template 中的设定
  • 应用order高的 Index Template 中的设定,之前的设定会被覆盖
  • 应用创建索引时,用户所指定的Settings和Mappings,并覆盖之前模版中的设定

Bucket & Metric

posted @ 2023-01-22 16:03  Dazzling!  阅读(117)  评论(0编辑  收藏  举报