前言
此文讨论一个 全文搜索引擎 的解决方案,ES是基于RESTful web接口。当然,还有其他的方案供你选择,例如:Lucene、讯搜、sphinx、Sort 。
Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
参考文献
ES官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index-doc.html
ES学习文档:http://doc.codingdict.com/elasticsearch/95/
ES 下载地址:https://www.elastic.co/cn/downloads/elasticsearch
ES集群搭建:http://www.cnblogs.com/aubin/p/8012840.html
中文分词器IK:https://github.com/medcl/elasticsearch-analysis-ik/releases
安装Elasticsearch
1、安装 java jdk 环境
因为 es 搜索引擎需要 java 环境的支持,所以需要先安装 java jdk,并且检查在全局情况下 java 和 javac 命令是否可用。此处略去 java jdk 的安装过程。。。
2、下载es软件
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.11.1-linux-x86_64.tar.gz
3、解压并移动到安装目录
tar -zxvf elasticsearch-7.11.1-linux-x86_64.tar.gz
mv elasticsearch-7.11.1-linux-x86_64 /usr/local/es
4、进行相关配置
4.1、新建 data 目录(用于存放数据文件)
[root@VM-0-15-centos home]# cd /usr/local/es
[root@VM-0-15-centos es]# mkdir data
4.2、修改config/elasticsearch.yml
vi config/elasticsearch.yml
取消或者修改下列项注释并修改:
#集群名称
cluster.name: my-application
#节点名称
node.name: node-1
#数据和日志的存储目录
path.data: /usr/local/es/data
path.logs: /usr/local/es/logs
#设置绑定的ip,设置为0.0.0.0以后就可以让任何计算机节点访问到了
network.host: 0.0.0.0
#端口
http.port: 9200
#设置在集群中的所有节点名称,这个节点名称就是之前所修改的,当然你也可以采用默认的也行,目前 是单机,放入一个节点即可
cluster.initial_master_nodes: ["node-1"]
修改完毕后,:wq
保存退出
4.3、修改内存
vi ./config/jvm.options
因为我的服务器内存是1G、而es默认配置的内存是1G、所以启动时可能会出现内存不足的情况
所以此内存的配置,请大家根据自己服务器的内存情况进行配置
-Xms256m
-Xmx256m
:wq 保存并退出
4.4、为linux添加es服务的用户
Tips: elasticsearch 服务不允许以 root 用户进行启动,所以应该为elasticsearch新建一个用户,并且给定相应的权限,切换为 elasticsearch 的用户后,以 elasticsearch 用户的身份进行启动
此文中为Elasticsearch添加的用户是es,后面的文章会被该用户(es),进行配置相应的权限
# 添加linux用户
[root@VM-0-15-centos config]# useradd es
# 为该用户设置密码
[root@VM-0-15-centos config]# passwd es
Changing password for user es.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
# 将 es 服务的权限给予该linux用户
[root@VM-0-15-centos config]# chown -R es /usr/local/es
4.5、编辑 /etc/security/limits.conf,在末尾加上
此配置文件用于配置用户的进程数和可以打开的文件的最大数
soft nproc:单个用户可用的最大进程数量(超过会警告)
hard nproc:单个用户可用的最大进程数量(超过会报错)
soft nofile:可打开的文件描述符的最大数(超过会警告)
hard nofile:可打开的文件描述符的最大数(超过会报错)
# 进入 limits.conf 文件
[root@VM-0-15-centos config]# vim /etc/security/limits.conf
# 在末尾为【es的用户】加上这些配置
# elasticsearch
es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096
4.6、在 20-nproc.conf,将 改为用户名(es的用户)*
对 es 用户做权限限制
# 进入 20-nproc.conf 文件
[root@VM-0-15-centos config]# vi /etc/security/limits.d/20-nproc.conf
# 把 * 改为用户名(es的用户)
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
es soft nproc 4096 # 所有的用户默认可以打开最大的进程数为 4096
root soft nproc unlimited # root 用户默认可以打开最大的进程数 无限制的。
4.7、修改sysctl.conf配置文件
此处用于指定用户所拥有的内存大小
# vi 进入 sysctl.conf 配置文件
[root@VM-0-15-centos config]# vim /etc/sysctl.conf
# 在末尾加上
vm.max_map_count = 655360
4.8、防火墙授权访问端口-9200
# 在 root 用户下,开发es的端口9200
[root@VM-0-15-centos root]# firewall-cmd --permanent --add-port=9200/tcp
# 平滑重载防火墙
firewall-cmd --reload
4.9、启动ES服务
登录刚才新建的elasticsearch用户,并启动elasticsearch
# 切换 es 用户
[root@VM-0-15-centos config]# su es
# 启动 es 服务
[es@VM-0-15-centos es]$ ./bin/elasticsearch
Tips
此处启动后,如果 ctrl+c 结束后,es服务将会关闭,所以启动的时候,请加入
-d
,表示以守护进程的方式启动 es 服务,用ps -aux | grep elasticsearch
建仓 es 的服务状态
4.10、网页访问
然后再浏览器输入服务器的 IP
+ 端口(默认:9200)
就可以看到是否成功了
安装IK分词器
注意: 下载此软件,请和 es 的版本保持一致
ik分词器是一个中文分词器,安装这个后 es 就支持中文分词啦。IK提供了两个分词算法:ik_smart 和 ik_max_word,其中 ik_smart 为最少切分,ik_max_word为最细 粒度划分。elasticsearch-plugin
可以通过这个命令来查看加载进来的插件
1、下载软件
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.11.1/elasticsearch-analysis-ik-7.11.1.zip
2、复制到es软件的插件目录
# 进入es插件目录
[root@VM-0-15-centos plugins]# /usr/local/es/plugins/
# 创建ik分词器目录
[root@VM-0-15-centos plugins]# mkdir elasticsearch-analysis-ik
[root@VM-0-15-centos plugins]# ls
elasticsearch-analysis-ik
# 进入ik分词器目录
[root@VM-0-15-centos plugins]# cd elasticsearch-analysis-ik/
# 把(ik分词器软件)复制到(ik分词器目录)
[root@VM-0-15-centos elasticsearch-analysis-ik]# cp /home/elasticsearch-analysis-ik-7.11.1.zip /usr/local/es/plugins/elasticsearch-analysis-ik/
3、解压软件
# 解压
[root@VM-0-15-centos elasticsearch-analysis-ik]# unzip elasticsearch-analysis-ik-7.11.1.zip
# 删除zip包
[root@VM-0-15-centos elasticsearch-analysis-ik]# rm -rf elasticsearch-analysis-ik-7.11.1.zip
4、重启es软件
重启后,就可以使用 ik 中文分词器了
安装遇到的问题
用户内存过低
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
翻译过来就是:elasticsearch用户拥有的内存权限太小,至少需要262144;
上文中,我已经修改了此参数为 65530,但是看来还是太小了
切换到root用户
执行命令:
sysctl -w vm.max_map_count=262144
查看结果:
sysctl -a|grep vm.max_map_count
显示:
vm.max_map_count = 262144
上述方法修改之后,如果重启虚拟机将失效,所以:
解决办法:
在 /etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
即可永久修改
安全提示错误日志
Active licenses is now [Basic]; Security is disabled
此提示可忽略。这是一个很普通的INFO级别的日志信息,就是linux服务器告诉我目前我的es集群的是默认的[Basic]许可,并且我的elasticsearch集群没有开启security(es集群中的security可以实现基于角色的访问控制,可以为es服务设置密码账号访问),这里我是没有开启security,即没有设置账号密码登陆elasticsearch服务。这就是一个安全认证的提示信息,仅此而已