一、默认模板说明
{ "default@template": { "order": 1, // 模板优先级,数值越大优先级越高 "index_patterns": [ // 模板应用的索引 "*" ], "settings": { "index": { "max_result_window": "65536", // 最大查询窗口,如果查询的窗口超过该大小,会报 Result window is too large 错误,需要调大这个配置 "routing": { "allocation": { "include": { "temperature": "hot" } } }, "refresh_interval": "30s", // 索引刷新间隔,被索引的文档在该间隔后才能被查询到,如果对于查询实时性要求较高,可以适当调小该值,但是值过小将影响写入性能 "unassigned": { "node_left": { "delayed_timeout": "5m" } }, "translog": { "sync_interval": "5s", // translog 刷盘间隔,值过小将影响写入性能 "durability": "async" }, "number_of_replicas": "1" // 副本分片数 } }, "mappings": { "_default_": { "_all": { "enabled": false // 建议禁用,_all 字段会包含所有其他字段形成一个大字符串,会占用较多磁盘空间,也会影响写入性能 }, "dynamic_templates": [ // 动态模板 { "message_full": { // 将名为 message_full 的字段动态映射为 text 和 keyword 类型 "match": "message_full", "mapping": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 2048 } } } } }, { "message": { // 将名为 message 的字段动态映射为 text 类型 "match": "message", "mapping": { "type": "text" } } }, { "strings": { // 将 string 类型字段动态映射为 keyword 类型 "match_mapping_type": "string", "mapping": { "type": "keyword" } } } ] } }, "aliases": {} }}
二、模板调整
在 Kibana 界面的 Dev Tools 中通过命令 PUT _template/my_template 自定义自己的索引模板,并通过设置模板优先级order的数值大于默认模板优先级,来覆盖默认的索引模板中的配置。
注意:索引模板仅在索引创建时应用,因此模板调整不会对已有的索引产生影响。
三、调整主分片个数
在 Elasticsearch 5.6.4版本和6.4.3版本中,默认的索引主分片个数为5个。对于数据规模较小、索引个数较多的场景,建议调小主分片个数,以减轻索引元数据对堆内存的压力。你可以参考下面模板调整主分片个数:
{ "index_patterns" : ["*"], "order" : 2, // 请确保模板中 order 字段的值大于1 order表示模板的优先级,值越大表示优先级越高 "settings" : { "index": { "number_of_shards" : 1 number_of_shards表示索引的分片数 } }}
四、调整字段类型
在默认模板中,我们将 string 类型字段动态映射为 keyword 类型,以防止对所有文本类型数据都进行全文索引。你可以根据业务需求,修改指定 string 类型字段为 text,使其可以全文索引。
{ "index_patterns" : ["*"], "order" : 2, // 请确保模板中 order 字段的值大于1 "mappings": { "properties": { "字段名": { "type": "text" //type表示字段的数据类型 } } }}
五、其他业务场景
例如,你希望让索引的文档在10s之后就能被搜索到,并应用于所有的 search-* 索引,那么你可以新建一个如下的模板:
{ "index_patterns" : ["search-*"], "order" : 2, // 请确保模板中 order 字段的值大于1 order表示模板的优先级,值越大表示优先级越高 "settings" : { "index": { "refresh_interval": "10s" } }}