最近需要用 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
-Xmx512m

Xms 和 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。

最后修改:2017 年 10 月 04 日
如果觉得我的文章对你有用,请随意赞赏