ES数据库 Docker容器 安装集群转移 中文分词

Docker2个月前更新 gyx131
231 0 0

 root 身份进入容器

直接使用 root 用户执行命令,无需 sudo
# 退出当前容器
exit

# 以 root 身份重新进入容器
docker exec -u root -it aee5b2d69a45 /bin/bash

# 在容器内执行安装命令
apt-get update && apt-get install -y iputils-ping net-tools

# 查看是否有网络
ping 114.114.114.114

 

步骤 1:安装必要插件

确保新集群已安装:
  1. IK 分词器:用于中文分词
  2. STConvert 插件:用于简繁转换
安装命令示例(以 ES 8.3.2 为例):
# 安装 IK 分词器
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.18.2

# 安装 STConvert 插件
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-stconvert/8.18.2


# 重启 Elasticsearch
systemctl restart elasticsearch

 

步骤 2:创建索引的 API 请求

使用以下请求创建新索引(例如命名为 new_cllj):
PUT 命令  
      
https://192.168.1.1:9200/创建的索引地址/

"properties": {
"这个是关联字段记得修改": {
"type": "text",
这个注意

json


{
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": 1,
"max_result_window": 2000000,
"analysis": {
"analyzer": {
"my_analyzer": {
"filter": ["lowercase"],
"char_filter": ["tsconvert", "symbol_filter"],
"type": "custom",
"tokenizer": "ik_max_word"
},
"my_letter_digit_analyzer": {
"filter": ["lowercase"],
"char_filter": ["tsconvert", "symbol_filter"],
"type": "custom",
"tokenizer": "letter_digit_tokenizer"
},
"my_standard_analyzer": {
"filter": ["lowercase"],
"type": "standard",
"char_filter": ["tsconvert", "symbol_filter"]
}
},
"char_filter": {
"tsconvert": {
"convert_type": "t2s",
"type": "stconvert"
},
"symbol_filter": {
"pattern": "[!\"#$%&'()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~]+",
"type": "pattern_replace",
"replacement": " "
}
},
"tokenizer": {
"letter_digit_tokenizer": {
"pattern": "(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)",
"type": "pattern"
}
}
},
"number_of_replicas": 1
}
},
"mappings": {
"properties": {
"这个是关联字段记得修改": {
"type": "text",
"analyzer": "my_analyzer", // 主字段使用中文分析器(繁转简+ik分词)
"fields": {
"raw": {
"type": "keyword", // 保留原始值(用于精确匹配,如排序、聚合)
"ignore_above": 256
},
"letter_digit": {
"type": "text",
"analyzer": "my_letter_digit_analyzer" // 子字段处理字母数字混合文本
},
"standard": {
"type": "text",
"analyzer": "my_standard_analyzer" // 子字段使用标准分析器
}
}
}
}
}
}

 

 

关键修改说明

  1. 移除只读参数
    • 删除了 creation_dateuuidversion 和 provided_name 字段,这些由 ES 自动生成。
  2. 调整分片和副本数
    • 根据新集群规模调整 number_of_shards 和 number_of_replicas
  3. 保留核心分析器配置
    • 完整保留了 my_analyzermy_letter_digit_analyzer 和 my_standard_analyzer 的配置。

验证新索引配置

GET /new_cllj/_settings
返回结果应与原索引的配置一致(除了系统自动生成的参数)。

后续步骤

如果需要迁移数据,可以使用 Reindex API:
POST _reindex
{
  "source": {
    "index": "cllj",
    "remote": {
      "host": "http://原集群地址:9200",
      "username": "your_username",
      "password": "your_password"
    }
  },
  "dest": {
    "index": "new_cllj"
  }
}
注意:远程 reindex 需要在原集群的 elasticsearch.yml 中配置 reindex.remote.whitelist

 

在 Elasticsearch 中配置 reindex.remote.whitelist 允许从远程集群执行数据重建索引 (reindex) 操作。以下是详细配置步骤:

一、配置步骤

  1. 找到 elasticsearch.yml 配置文件
    通常位于 Elasticsearch 安装目录的 config/ 文件夹下。
  2. 添加远程集群白名单
    在 elasticsearch.yml 中添加以下配置,指定允许访问的远程集群地址:
    # 允许访问的远程集群地址,格式为 "主机:端口"
    reindex.remote.whitelist: "remote-cluster-host:9200"
    
    • 多个地址用逗号分隔:"host1:9200,host2:9200"
    • 支持通配符:"*.example.com:9200" 允许该域名下所有主
  3. 保存文件并重启 Elasticsearch
    配置修改后,重启 Elasticsearch 服务使配置生效。

二、配置示例

示例 1:允许单个远程集群

reindex.remote.whitelist: "remote-es-cluster:9200"

示例 2:允许多个远程集群

reindex.remote.whitelist: "prod-es:9200,staging-es:9200,192.168.1.100:9200"

示例 3:使用通配符

reindex.remote.whitelist: "*.example.com:9200"  # 允许 example.com 域名下所有主机

三、注意事项

  1. 安全风险
    该配置会暴露集群给指定的远程地址,建议仅允许受信任的 IP 或域名。
  2. 端口检查
    确保远程集群的 HTTP 端口(默认为 9200)可访问,且防火墙未阻止连接。
  3. 身份验证(可选)
    若远程集群需要身份验证,需额外配置:
    reindex.remote.whitelist: "remote-cluster:9200"
    # 远程集群的基本认证信息
    reindex.remote.username: "your_username"
    reindex.remote.password: "your_password"
    
  4. 版本兼容性
    远程集群与本地集群的 Elasticsearch 版本建议保持一致,避免兼容性问题。

四、验证配置

配置重启后,可通过以下命令验证远程 reindex 是否正常工作:
curl -X POST "localhost:9200/_reindex" -H 'Content-Type: application/json' -d'
{
  "source": {
    "remote": {
      "host": "http://remote-cluster:9200",
      "username": "your_username",  # 如果配置了认证
      "password": "your_password"
    },
    "index": "source-index"
  },
  "dest": {
    "index": "target-index"
  }
}
'
若返回 {"took":...,"timed_out":false,...} 则表示配置成功。
© 版权声明

相关文章

暂无评论

暂无评论...