es 修改索引模板分词类型

发布于:2025-03-06 ⋅ 阅读:(12) ⋅ 点赞:(0)

手搓

步骤

  1. 修改模板分词
  2. 计算新的索引名称
  3. 删除之前索引别名
  4. 新建索引

修改模板分词器类型并根据索引名称重新生成新索引

#!/bin/bash


red_text() {
    echo -e "\033[31m$1\033[0m"
}

# 定义一个显示绿色文本的函数
green_text() {
    echo -e "\033[32m$1\033[0m"
}

echo "            ===========开始初始化ES 7.6.x==========="
#address="http://172.30.3.226:9200"
address="http://10.11.55.53:9200"
# 账号和密码
username="elastic"
password="Esb@123"


#msg_trace esb-m-trace-logs
#msg_sendlog esb-m-produce-logs
#msg_recvlog esb-m-consume-logs
#msg_systemapplog esb-middleware-app-monitor-logs
#msg_sendersituation esb-statistics-logs

non_body_index_list=("esb-m-produce-logs")
index_list=()

#是否删除存在的index 0表示不删除,1表示删除
delete_index=1

#es配置文件是否配置node.attr.box_type,配置了是1,不配置是0。
node_attr_box_type_config=0

# 设置max_size变量 gb 建议25gb
max_size=25

#天 建议30
max_age=30

max_docs_non_message_body=200000000
max_docs=50000000

max_result_window=1000000

echo "address: ${address}"
echo "username: ${username}"
echo "password: ${password}"
echo "non_body_index_list: ${non_body_index_list}"
echo "index_list: ${index_list}"
echo "max_size: ${max_size}gb"
echo "max_age: ${max_age}gb"
echo "max_docs_non_message_body: ${max_docs_non_message_body}"
echo "max_docs: ${max_docs}"


echo "---------------------------------------------------------------------------"

echo ""
echo ""
echo ""
echo ""
echo ""
echo "            ===========2. 开始创建 ES索引模版 ==========="

echo "正在创建ES索引模版(${non_body_index_list}):"
for item in "${non_body_index_list[@]}"; do
url=${address}"/_template/${item}_template"
echo "url >>>> "$url
data=$(cat <<EOF
{
  "order": 0,
  "index_patterns": [
    "${item}-*"
  ],
  "settings": {
    "index": {
      "lifecycle": {
        "name": "ilm-fm",
        "rollover_alias": "${item}"
      },
      "max_result_window": "${max_result_window}",
      "refresh_interval": "10s",
      "analysis": {
        "analyzer": {
          "oap_log_analyzer": {
            "type": "ik_max_word"
          },
          "oap_log_search_analyzer": {
            "type": "ik_smart"
          }
        }
      },
      "number_of_shards": "1",
      "number_of_replicas": "1"
    }
  },
  "mappings": {
    "_source": {},
    "_meta": {},
    "properties": {}
  }
}
EOF
)  
result=$(curl -X PUT -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
    green_text "创建ES索引模版成功。${item}_template"
else
    success=0
    red_text "创建ES索引模版失败!${item}_template"
fi
done


echo "            ===========2. 创建 ES索引模版 结束 ==========="

echo "------------------------------------------------------------------------------"


echo ""
echo ""
echo ""
echo ""
echo ""
echo "            ===========3. 开始创建 ES索引 ==========="

echo "正在创建ES索引${non_body_index_list}:"
for item in "${non_body_index_list[@]}"; do
url=${address}


echo "url >>>> "$url
# 定义 Elasticsearch 地址和基础索引名称



# 获取所有匹配的索引
index_names=$(curl -s PUT -u "${username}:${password}" -H "Content-Type: application/json" "${address}/_cat/indices/${item}-*?h=index" | tr -d '\r')

# 将索引名称转换为数组
indices=($index_names)

# 提取后缀并找到最大值
max_suffix=0
for index in "${indices[@]}"; do
    echo "获取到的index == $index"
    # 截取后缀数字部分
    #suffix=$(echo "$index" | grep -E -o "$item.*([0-9]+)$" | grep -E -o "[0-9]+" | sed 's/^0*//') 
	suffix=$(echo "$index" | grep -E -o "$item.*([0-9]+)$" | grep -E -o "[0-9]+" | sed 's/^0*//')
    # 如果suffix为空,将其设为0
    if [ -z "$suffix" ]; then
        suffix=0
    fi
	# 将后缀转为数字
	# num=$(printf "%d" "$suffix")
	if ! [[ "$suffix" =~ ^[0-9]+$  ]]; then
		red_text "截取到的后缀不是数字"$suffix
    else 
		if [[ "$suffix" -gt "$max_value" ]]; then
			max_value="$suffix"
		fi
	fi
done

# 输出最大值加一的结果,格式化为六位数字
new_suffix=$(printf "%06d" $((max_value + 1)))

# 生成新的索引名称

new_index_name="${item}-${new_suffix}"
echo "max_value =========>>>> "$max_value
echo "new_index_name =========>>>> "$new_index_name
# 删除之前索引的别名
old_suffix=$(printf "%06d" $((max_value)))
echo "需要删除别名的索引 =========>>>> "$old_suffix
echo "==========删除别名========"
old_index="${item}-${old_suffix}"
data=$(cat <<EOF
{
    "actions": [
        {
            "remove": {
                "index": "${old_index}",
                "alias": "${item}"
            }
        }
    ]
}
EOF
)  
url=${address}"/_aliases"
result=$(curl -X POST  -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "删除之前索引的别名,执行结果:"$result
if [[ $result == *'"acknowledged":true'* ]]; then
    green_text "删除之前索引的别名。"${item}
else
    success=0
    red_text "删除之前索引的别名!${item},建议设置delete_index=1"
fi
url=${address}"/${new_index_name}"
echo "url >>>> "$url
data=$(cat <<EOF
{
  "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0,
        "analysis": {
            "analyzer": {
                "ik_max_word": {
                    "type": "custom",
                    "tokenizer": "ik_max_word"
                },
                "ik_smart": {
                    "type": "custom",
                    "tokenizer": "ik_smart"
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart"
            }
        }
    },
  "aliases": {
    "${item}": {
      "is_write_index": true
    }
  }
}
EOF
)  
result=$(curl -X PUT -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
    green_text "创建ES索引成功。"${item}
else
    success=0
    red_text "创建ES索引失败!${item},建议设置delete_index=1"
fi
done

echo ""
echo "            ===========3. 创建 ES索引 结束 ==========="

echo ""
if [[ $success -eq 1 ]]; then
    green_text ">>>>>>>>>>>>>更新ES成功<<<<<<<<<<<<<<"
else
    red_text "!!!!!!!!!!!!!!更新ES失败!!!!!!!!!!!!!!!"
fi

echo ""
echo ""
echo ""
echo ""
echo " ==========更新结束 ==========="

自动

  1. 修改模板
  2. 执行模板自动创建索引

 

#!/bin/bash


red_text() {
    echo -e "\033[31m$1\033[0m"
}

# 定义一个显示绿色文本的函数
green_text() {
    echo -e "\033[32m$1\033[0m"
}

echo "            ===========开始修改ES 7.6.x==========="
#address="http://172.30.3.226:9200"
address="http://10.11.55.53:9200"
# 账号和密码
username="elastic"
password="Esb@123"


#msg_trace esb-m-trace-logs
#msg_sendlog esb-m-produce-logs
#msg_recvlog esb-m-consume-logs
#msg_systemapplog esb-middleware-app-monitor-logs
#msg_sendersituation esb-statistics-logs

#non_body_index_list=("esb-statistics-logs" "esb-m-consume-logs" "esb-m-trace-logs")
#index_list=("esb-middleware-app-monitor-logs" "esb-m-produce-logs")
index_list=("esb-middleware-app-monitor-logs" "esb-m-produce-logs")
#是否删除存在的index 0表示不删除,1表示删除
delete_index=1

#es配置文件是否配置node.attr.box_type,配置了是1,不配置是0。
node_attr_box_type_config=0

# 设置max_size变量 gb 建议25gb
max_size=20

#天 建议30
max_age=17

max_docs_non_message_body=200000000
max_docs=50000000

max_result_window=1000000

echo "address: ${address}"
echo "username: ${username}"
echo "password: ${password}"
echo "non_body_index_list: ${non_body_index_list}"
echo "index_list: ${index_list}"
echo "max_size: ${max_size}gb"
echo "max_age: ${max_age}gb"
echo "max_docs_non_message_body: ${max_docs_non_message_body}"
echo "max_docs: ${max_docs}"

echo "---------------------------------------------------------------------------"

echo ""
echo ""
echo ""
echo ""
echo ""




echo ""
echo "            ===========1. 开始修改 ES索引模版 ==========="

echo "正在修改non_body_index_list 集合ES索引模版(${non_body_index_list}):"
for item in "${non_body_index_list[@]}"; do
url=${address}"/_template/${item}_template"
echo "url >>>> "$url
data=$(cat <<EOF
{
  "order": 0,
  "index_patterns": [
    "${item}-*"
  ],
  "settings": {
    "index": {
      "lifecycle": {
        "name": "ilm-fm",
        "rollover_alias": "${item}"
      },
      "max_result_window": "${max_result_window}",
      "refresh_interval": "10s",
      "analysis": {
        "analyzer": {
          "oap_log_analyzer": {
            "type": "ik_max_word"
          },
          "oap_log_search_analyzer": {
            "type": "ik_smart"
          },
		  "default": {  // 设置默认分词器
          "type": "ik_max_word"  // 使用 IK 分词器的细粒度模式
			}	
        }
      },
      "number_of_shards": "1",
      "number_of_replicas": "1"
    }
  },
  "mappings": {
    "_source": {},
    "_meta": {},
    "properties": {}
  }
}
EOF
)  
result=$(curl -X PUT -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
    green_text "修改ES索引模版成功。${item}_template"
else
    success=0
    red_text "修改ES索引模版失败!${item}_template"
fi
done

echo ""
echo "正在修改index_list集合ES索引模版(${index_list})"
for item in "${index_list[@]}"; do
url=${address}"/_template/${item}_template"
echo "url >>>> "$url
data=$(cat <<EOF
{
  "order": 0,
  "index_patterns": [
    "${item}-*"
  ],
  "settings": {
    "index": {
      "lifecycle": {
        "name": "ilm-fm-large",
        "rollover_alias": "${item}"
      },
      "max_result_window": "${max_result_window}",
      "refresh_interval": "10s",
      "analysis": {
        "analyzer": {
          "oap_log_analyzer": {
            "type": "ik_max_word"
          },
          "oap_log_search_analyzer": {
            "type": "ik_smart"
          },
		  "default": {  // 设置默认分词器
          "type": "ik_max_word"  // 使用 IK 分词器的细粒度模式
			}	
        }
      },
      "number_of_shards": "1",
      "number_of_replicas": "1"
    }
  },
  "mappings": {
    "_source": {},
    "_meta": {},
    "properties": {
     
    }
  }
}

EOF
)  
result=$(curl -X PUT -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)
echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
    green_text "修改ES索引模版成功。${item}_template"
else
    success=0
    red_text "修改ES索引模版失败!${item}_template"
fi
done

echo "            ===========1. 修改 ES索引模版 结束 ==========="

echo "------------------------------------------------------------------------------"


echo ""
echo ""
echo ""
echo ""
echo "            ===========2. 强制滚动生命周期 ==========="

echo "强制滚动生命周期 ES索引集合 (${non_body_index_list}):"
for item in "${non_body_index_list[@]}"; do
echo "url >>>> "$url
url=${address}"/${item}/_rollover"
data=$(cat <<EOF
{
  "conditions": {}
}
EOF
)
result=$(curl -X POST -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)

echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
    green_text "强制滚动生命周期成功。${item}"
else
    success=0
    red_text "强制滚动生命周期失败!${item}"
fi
done

echo "强制滚动生命周期 ES索引集合 (${index_list}):"
for item in "${index_list[@]}"; do
echo "url >>>> "$url
url=${address}"/${item}/_rollover"
data=$(cat <<EOF
{
  "conditions": {}
}
EOF
)
result=$(curl -X POST -u "${username}:${password}" -H "Content-Type: application/json" -d "$data" $url)

echo "执行结果:"$result
# 判断结果是否包含"acknowledged":true
if [[ $result == *'"acknowledged":true'* ]]; then
    green_text "强制滚动生命周期成功。${item}"
else
    success=0
    red_text "强制滚动生命周期失败!${item}"
fi
done


网站公告

今日签到

点亮在社区的每一天
去签到