专栏名称: 互联网后端架构
主要介绍Java后端架构。其中也会掺杂一些前端、GO、Python、Linux,目标:全栈工程师!---好像很牛叉的样子 ^-^
目录
相关文章推荐
51好读  ›  专栏  ›  互联网后端架构

ElasticSearch 索引设置总结

互联网后端架构  · 公众号  · 架构  · 2020-06-22 08:00

正文

在使用ES时,我们常见的就是需要生成一个template来定义索引的设置,分词器,Mapping.本文将基于项目经验来总结一些常用的配置。

Index设置

  • index.refresh_interval

配置一个刷新时间,将index buffer刷新到os cache的时间间隔,刷新到os cache的数据才可以被索引到,默认是1s.如果对实时性搜索要求不高的地方,可设置时间为30s,提高性能。

  • number_of_replicas

对于集群数据节点 >=2 的场景,建议副本至少设置为 1(一主一从,共两个副本), 可以提高集群容错和搜索吞吐量(副本分片可用于查询)。

  • index.number_of_shards

主副本的分片数,默认是5个,最大值限制为1024个,这个值是分片数可适当的增加,提高索引的并发性能,但是分片越多,也会导致资源耗费越高,索引要根据访问并发数和ES集群的资源来设置。 经验公式:分片数 = 索引大小/分片大小经验值 30GB, 官方推荐Shard值在 20-40GB性能最好,日志类:单分片<50GB;搜索类:单分片<20GB。不足100G,可直接设置3-5个分片(结合节点数和扩展性),超过100G则可以按照如上经验公式来规划。

  • index.max_result_window

索引能够查询到最大数据量,from+size深分页的最大条数,默认是10000,适当限制这个值可以防止深分页内存占用过多,如果全量导出,需要使用Scroll游标办法。

  • index.store.preload

默认情况下,Elasticsearch完全依靠操作系统文件系统缓存来缓存I / O操作.可以设置index.store.preload,以告知操作系统在打开时将热索引文件的内容加载到内存中。默认值为空,即不提前加载索引到内存中,常见的值有 ["nvd", "dvd", "tim", "doc", "dim"]。对应的 norms, doc values, terms dictionaries, postings lists, points,常见的设置为 index.store.preload = ["nvd", "dvd"],即提前加载norms评分信息和doc value数据到内存,便于快速索引。

  • index. sort.field  和 index. sort.order

建立索引的排序字段,写入的时候就按照顺序写入。对于一些具备顺序的字段,可以提前设置,比如时间字段。配置见下

{    "settings" : {        "index" : {            "sort.field" : "date",  // 字段名字            "sort.order" : "desc"   // 升序 asc 和降序 desc        }    }}

Mapping设置

  • 动态映射

mapping的通用配置,dynamic_templates配置动态类型转换,将一个类型转换为另一个类型

{  "mappings": {    "_doc": {      "dynamic_templates": [        {          "strings_as_keywords": {            "match_mapping_type": "string",            "mapping": {              "type": "keyword"            }          }        }      ],      "_source": {        "enabled": true      },      "properties": {        .....      }    }  }}
  • 字段类型

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping.html#_field_datatypes

a simple type like text , keyword , date , long , double , boolean or ip .

a type which supports the hierarchical nature of JSON such as object or nested .

or a specialised type like geo_point , geo_shape , or completion .

  • 常见的类型和搜索类型的联系

(1)text 类型作用:分词,将大段的文字根据分词器切分成独立的词或者词组,以便全文检索。
适用于:email 内容、某产品的描述等需要分词全文检索的字段;
不适用:排序或聚合(Significant Terms 聚合例外)

(2)keyword 类型:无需分词、整段完整精确匹配。
适用于:email 地址、住址、状态码、分类 tags。

  • 常见的搜索类型使用的字段类型

term 精确匹配







请到「今天看啥」查看全文