最近需要用 Elasticsearch 做全文检索,在 CentOS 7 上安装了 Elasticsearch 5.6.2,并配上 IK 中文分词器。下面记录完整的安装和配置过程。
安装 Elasticsearch
Elasticsearch 5.6 需要 Java 8,先确认当前 Java 版本:
java -version本文使用的版本是 JDK 1.8.0_144:
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)导入 Elastic 的 GPG 密钥:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch在 /etc/yum.repos.d/ 下创建 elasticsearch.repo:
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md安装 5.6.2:
yum install elasticsearch-5.6.2重新加载 systemd 配置,设置开机启动并启动服务:
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service默认情况下 Elasticsearch 只监听本机地址,可以直接验证:
curl http://localhost:9200返回结果中能看到版本号和集群名称:
{
"name": "<node-name>",
"cluster_name": "elasticsearch",
"version": {
"number": "5.6.2",
"lucene_version": "6.6.1"
},
"tagline": "You Know, for Search"
}配置 Elasticsearch
RPM 安装后的主配置文件是 /etc/elasticsearch/elasticsearch.yml,常用目录如下:
| 用途 | 默认路径 |
|---|---|
| 配置目录 | /etc/elasticsearch |
| 数据目录 | /var/lib/elasticsearch |
| 日志目录 | /var/log/elasticsearch |
| 插件目录 | /usr/share/elasticsearch/plugins |
/etc/sysconfig/elasticsearch 用于设置服务运行环境,其中几个常用参数如下:
| 参数 | 说明 |
|---|---|
JAVA_HOME | 指定 Java 安装路径 |
MAX_OPEN_FILES | 最大打开文件数,默认 65536 |
MAX_LOCKED_MEMORY | 使用 bootstrap.memory_lock 时设置锁定内存上限 |
MAX_MAP_COUNT | 最大内存映射区域数,默认 262144 |
LOG_DIR | 日志目录 |
DATA_DIR | 数据目录 |
CONF_DIR | 配置文件目录 |
ES_JAVA_OPTS | 额外的 JVM 参数 |
调整 JVM 堆内存
Elasticsearch 5.6 默认使用 2 GB 堆内存。这台 ECS 一共 4 GB 内存,还运行着博客和其他服务,所以编辑 /etc/elasticsearch/jvm.options,把堆内存调整为 512 MB:
-Xms512m
-Xmx512mXms 和 Xmx 应当设置为相同的值,避免运行时调整堆大小。512 MB 只是这台机器当时的取值,实际部署需要按机器内存和负载调整,同时不要超过物理内存的 50%。修改后重启服务:
systemctl restart elasticsearch.service网络配置
单机使用时保持默认的本机监听即可。不要直接把 9200 和 9300 端口开放到公网;需要远程访问时,应当限制安全组和防火墙来源,并增加认证或通过受控的反向代理访问。
安装 IK 中文分词器
Elasticsearch 自带的分词器会把中文逐字拆分,中文检索通常需要安装 IK。插件版本必须与 Elasticsearch 版本完全一致,5.6.2 对应的安装命令是:
/usr/share/elasticsearch/bin/elasticsearch-plugin install \
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.2/elasticsearch-analysis-ik-5.6.2.zip如果安装 5.6.1 插件,会因为版本不一致而启动失败,不需要修改 POM 后重新编译,换成对应的 5.6.2 包即可。
安装完成后查看插件列表,并重启 Elasticsearch:
/usr/share/elasticsearch/bin/elasticsearch-plugin list
systemctl restart elasticsearch.service使用 _analyze 接口测试 ik_max_word:
curl -X POST 'http://localhost:9200/_analyze?pretty' \
-H 'Content-Type: application/json' \
-d '{
"analyzer": "ik_max_word",
"text": "中华人民共和国国歌"
}'返回的 tokens 中能够看到 IK 拆分出的词语,说明插件已经生效。之后创建索引时,可以在 mapping 中把字段的 analyzer 设置为 ik_max_word,需要较粗粒度分词时则使用 ik_smart。
Elasticsearch 的 RPM 安装和系统参数可以参考 Elasticsearch 5.6 RPM 安装文档,IK 的版本和配置说明见 elasticsearch-analysis-ik。