基于 IK 分词器的 ES 通用索引模板
2018-11-17 本文已影响0人
rochy_he
一、索引模板
1、模板简述
ES 允许用户定义一系列模板,当索引被创建的时候,模板的设置会自动被应用到新创建的索引中,这一系列模板被称作Index Templates
。模板的设置包括 settings
和 mappings
,通过模式匹配(匹配索引名)的方式控制模板是否应用于新索引。
索引模板只在索引被创建时候生效,一旦索引创建后,对索引模板的修改不会对旧索引的设置造成任何影响。
2、模板结构
简单来说,索引模板是一种复用机制,省去了大量重复性劳动,索引模板的基本结构如下所示:
{
"order": 0, // 模板优先级
"template": "logstash_*", // 模板匹配的方式
"settings": {...}, // 索引设置
"mappings": {...}, // 索引中各字段的映射定义
"aliases": {...} // 索引的别名
}
3、模板说明
对于模板内部更加细节的配置,本文不做介绍,具体可参考文章:https://www.jianshu.com/p/1f67e4436c37。
二、通用的索引模板
- 下面的通用模板适合大多数情况,仅供参考,实际应用请务必根据实际情况进行优化调整;
- 使用模板前,请务必安装 IK 分词器;
- 对于索引配置的优化,可以参考文章Elasitcsearch索引优化。
{
"order": 0,
"template": "*",
"settings": {
"index": {
"refresh_interval": "5s",
"number_of_shards": "3",
"max_result_window": 10000,
"translog": {
"flush_threshold_size": "500mb",
"sync_interval": "30s",
"durability": "async"
},
"merge": {
"scheduler": {
"max_merge_count": "100",
"max_thread_count": "1"
}
},
"analysis": {
"analyzer": {
"hanlp_array": {
"type": "pattern",
"pattern": "[,;。??!!,、;::“”‘’《》【】()~〈〉「」『』…/\\[\\]<>\"\\`\\^*+]+",
"lowercase": "true"
}
}
},
"number_of_replicas": "0",
"unassigned": {
"node_left": {
"delayed_timeout": "2m"
}
}
}
},
"mappings": {
"doc": {
"dynamic_date_formats": ["yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||yyyy-MM||yyyy/MM/dd||yyyy/MM||strict_date_optional_time||epoch_millis"],
"_all": {
"enabled": false
},
"properties": {
"html": {
"index": "false",
"doc_values": "false",
"norms": "false",
"fielddata": "false",
"store": "false",
"type": "text"
}
},
"dynamic_templates": [
{
"id_field": {
"mapping": {
"type": "keyword",
"store": "true"
},
"match": "*id"
}
},
{
"no_field": {
"mapping": {
"type": "keyword",
"store": "true"
},
"match": "*no"
}
},
{
"code_field": {
"mapping": {
"type": "keyword",
"store": "true"
},
"match": "*code"
}
},
{
"geo_field": {
"mapping": {
"type": "geo_point",
"store": "true"
},
"match": "*_geo"
}
},
{
"ip_field": {
"mapping": {
"type": "ip",
"store": "true"
},
"match": "*_ip"
}
},
{
"len_field": {
"mapping": {
"type": "integer",
"store": "true"
},
"match": "*_len"
}
},
{
"num_field": {
"mapping": {
"type": "integer",
"store": "true"
},
"match": "*_num"
}
},
{
"long_field": {
"mapping": {
"type": "long",
"store": "true"
},
"match": "*_long"
}
},
{
"ft_field": {
"mapping": {
"type": "float",
"store": "true"
},
"match": "*_ft"
}
},
{
"db_field": {
"mapping": {
"type": "double",
"store": "true"
},
"match": "*_db"
}
},
{
"typ_field": {
"mapping": {
"type": "keyword",
"store": "true"
},
"match": "*_typ*"
}
},
{
"sta_field": {
"mapping": {
"type": "keyword",
"store": "true"
},
"match": "*_sta"
}
},
{
"lvl_field": {
"mapping": {
"type": "keyword",
"store": "true"
},
"match": "*_lvl"
}
},
{
"flg_field": {
"mapping": {
"type": "keyword",
"store": "true"
},
"match": "*_flg"
}
},
{
"dtm_field": {
"mapping": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||yyyy-MM||yyyy||yyyy/MM/dd||yyyy/MM||strict_date_optional_time||epoch_millis",
"store": "true"
},
"match": "*_dtm"
}
},
{
"ns_field": {
"mapping": {
"index": "false",
"doc_values": "false",
"norms": "false",
"fielddata": "false",
"store": "false"
},
"match": "*_ns"
}
},
{
"bin_field": {
"mapping": {
"type": "binary",
"doc_values": "false",
"norms": "false",
"fielddata": "false",
"store": "false"
},
"match": "*_bin"
}
},
{
"raw_field": {
"mapping": {
"type": "binary",
"doc_values": "false",
"norms": "false",
"fielddata": "false",
"store": "false"
},
"match": "*_raw"
}
},
{
"std_field": {
"mapping": {
"store": "true",
"analyzer": "standard",
"type": "text"
},
"match": "*_std"
}
},
{
"url_field": {
"mapping": {
"store": "true",
"type": "keyword",
"doc_values": "false",
"norms": "false",
"fielddata": "false"
},
"match": "*_url"
}
},
{
"tag_field": {
"mapping": {
"store": "true",
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"search_quote_analyzer": "ik_max_word",
"fields": {
"orginal": {
"type": "keyword"
},
"array": {
"analyzer": "hanlp_array",
"search_analyzer": "ik_max_word",
"type": "text",
"fielddata": "true"
}
}
},
"match": "*tag"
}
},
{
"file_field": {
"mapping": {
"type": "attachment",
"fields": {
"content": {
"store": "false",
"type": "text"
},
"author": {
"store": "true",
"type": "text"
},
"title": {
"store": "true",
"type": "text"
},
"keywords": {
"store": "true",
"type": "text"
},
"content_length": {
"store": "true"
},
"language": {
"store": "true"
},
"date": {
"store": "true",
"type": "date"
},
"content_type": {
"store": "true"
}
}
},
"match": "*_file"
}
},
{
"path_field": {
"mapping": {
"store": "true",
"analyzer": "hanlp_array",
"search_analyzer": "ik_max_word",
"type": "text",
"fielddata": "true",
"fields": {
"normal": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"search_quote_analyzer": "ik_max_word"
},
"orginal": {
"type": "keyword"
}
}
},
"match": "*_path"
}
},
{
"arr_field": {
"mapping": {
"store": "true",
"analyzer": "hanlp_array",
"search_analyzer": "ik_max_word",
"type": "text",
"fielddata": "true",
"fields": {
"normal": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"search_quote_analyzer": "ik_max_word"
}
}
},
"match": "*_arr"
}
},
{
"string_field": {
"mapping": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"search_quote_analyzer": "ik_max_word",
"term_vector": "with_positions_offsets",
"fields": {
"orginal": {
"type": "keyword",
"ignore_above": "36"
}
}
},
"match_mapping_type": "string"
}
}
]
}
}
}
Any Code,Code Any!
扫码关注『AnyCode』,编程路上,一起前行。
image