elastic search中如何对字段进行建模

在这里插入图片描述

1. 选择字段类型

2. 是否需要搜索

  • 如不需要检索,排序和聚合分析,Enable设置成false
  • 如不需要检索,index设置成false
  • 对需要存储的字段,可以通过如下配置,设定存储粒度
    • index_optioins/Norms:不需要归一化数据时,可以关闭

3. 是否需要聚合及排序

  • 如不需要检索,排序和聚合分析,Enable设置成false
  • 如不需要排序或者聚合分析功能,Doc_values / fielddata设置成false
  • 更新频繁,聚合查询频繁的keyword类型的字段
    • 推荐将eager_global_ordinals设置为true

4. 额外的存储

在这里插入图片描述
disable _source:节约磁盘

造成的结果:

  • 无法做reindex,无法做update
  • kibana中无法做discovery

建议

1. 避免过多字段

Mapping 信息保存在Cluster State 中,数据量过大,对集群性能会有影响(Cluster
State 信息需要和所有的节点同步)

默认最大字段数是1000,可以设置index.mapping.total_fields.limt 限定最大字段数。

2. 避免正则查询

正则,通配符查询,前缀查询属于Term 查询,但是性能不够好

特别是将通配符放在开头,会导致性能的灾难

案例:

错误的将网址映射成 keyword,然后用通配符查询。应该使用 Text,结合 URL 分词器

案例:文档中某个字段包含了了Elasticsearch 的版本信息,例如version: “7.1.0”

搜索所有是bug fix 的版本?每个主要版本号所关联的文档?

解决方案:将单个字符串转换为对象
在这里插入图片描述
搜索的时候采用filter
在这里插入图片描述

3. 避免空值引起的聚合不准

在这里插入图片描述
使用Null_Value 解决空值的问题
在这里插入图片描述

4. 为索引的Mapping 加入Meta 信息

Mappings 设置非常重要,需要从两个维度进行考虑

  • 功能:搜索、聚合、排序
  • 性能:存储的开销;内存的开销;搜索的性能

Mappings 设置是一个迭代的过程

  • 加入新的字段很容易(必要时需要update_by_query)
  • 更新、删除字段不允许(需要Reindex 重建数据)
  • 最好能对Mappings 加入Meta 信息,更好的进行版本管理
  • 可以考虑将Mapping 文件上传git 进行管理
    在这里插入图片描述
    参考:极客时间 阮老师 es课程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值