介绍
ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。基百科、Stack Overflow、Github 都采用它。
本文从零开始,讲解如何使用 Elasticsearch 搭建自己的全文搜索引擎。每一步都有详细的说明,大家跟着做就能学会。
环境1、VMware
2、Centos 6.6
3、Elasticsearch 5.5.2
4、JDK 1.8
���ٲ�ʢ,���ٸ�ǿVMware 安装以及在 VMware 中安装 Centos 这个就不说了,环境配置直接默认就好,不过分配给机器的内存最好设置大点(建议 2G),
使用 dhclient 命令来自动获取 IP 地址,查看获取的 IP 地址则使用命令 ip addr 或者 ifconfig ,则会看到网卡信息和 lo 卡信息。
给虚拟机额中的 linux 设置固定的 ip(因为后面发现每次机器重启后又要重新使用 dhclient 命令来自动获取 IP 地址)
1vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改:
1onboot=yes
2bootproto=static
增加:(下面可设置可不设置)
1IPADDR=192.168.1.113 网卡IP地址
2GATEWAY=192.168.1.1
3NETMASK=255.255.255.0
设置好之后,把网络服务重启一下, service network restart
修改 ip 地址参考: http://jingyan.baidu.com/article/e4d08ffdd417660fd3f60d70.html
关注我大环境都准备好了,下面开始安装步骤:
安装 JDK 1.8先卸载自带的 openjdk,查找 openjdk
1rpm -qa | grep java
卸载 openjdk
1yum -y remove java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el65.x8664
2yum -y remove java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
解压 JDK 安装包:
附上jdk1.8的下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
解压完成后配置一下环境变量就 ok
1、在/usr/local/下创建Java文件夹
1cd /usr/local/ 进入目录
2mkdir java 新建java目录
2、文件夹创建完毕,把安装包拷贝到 Java 目录中,然后解压 jdk 到当前目录
1cp /usr/jdk-8u144-linux-x64.tar.gz /usr/local/java/ **注意匹配你自己的文件名** 拷贝到java目录
2tar -zxvf jdk-8u144-linux-x64.tar.gz 解压到当前目录(Java目录)
3、解压完之后,Java目录中会出现一个jdk1.8.0_144的目录,这就解压完成了。之后配置一下环境变量。
编辑/etc/下的profile文件,配置环境变量
1vi /etc/profile
进入profile文件的编辑模式
在最后边追加一下内容(配置的时候一定要根据自己的目录情况而定哦!)
1 JAVA_HOME=/usr/local/java/jdk1.8.0_144
2 CLASSPATH=$JAVA_HOME/lib/
3 PATH=$PATH:$JAVA_HOME/bin
4 export PATH JAVA_HOME CLASSPATH
之后保存并退出文件之后。
让文件生效:
1source /etc/profile
在控制台输入Java 和 Java -version 看有没有信息输出,如下: java -version
1java version "1.8.0_144"
2 Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
3 Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)
能显示以上信息,就说明 JDK 安装成功啦
安装 Maven因为后面可能会用到 maven ,先装上这个。
1、下载 maven
1wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.tar.gz
2、解压至 /usr/local 目录
1tar -zxvf apache-maven-3.2.5-bin.tar.gz
3、配置公司给的配置
替换成公司给的 setting.xml 文件,修改关于本地仓库的位置, 默认位置:${user.home}/.m2/repository
4、配置环境变量etc/profile
最后添加以下两行
1export MAVEN_HOME=/usr/local/apache-maven-3.2.5
2export PATH=${PATH}:${MAVEN_HOME}/bin
5、测试
1[root@localhost ~]# mvn -v
2Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T09:29:23-08:00)
3Maven home: /usr/local/apache-maven-3.2.5
VMware 虚拟机里面的三台机器 IP 分别是:
1192.168.153.133
2192.168.153.134
3192.168.153.132
配置 hosts在 /etc/hosts下面编写:ip node 节点的名字(域名解析)
1vim /etc/hosts
新增:
1192.168.153.133 es1
2192.168.153.134 es2
3192.168.153.132 es3
设置 SSH 免密码登录安装expect命令 : yum -y install expect
将 ssh_p2p.jar 随便解压到任何目录下: (这个 jar 包可以去网上下载)
1unzip ssh_p2p.zip
修改 resource 的 ip 值
1vim /ssh_p2p/deploy_data/resource (各个节点和账户名,密码,free代表相互都可以无密码登陆)
1#设置为你每台虚拟机的ip地址,用户名,密码
2address=(
3"192.168.153.133,root,123456,free"
4"192.168.153,134,root,123456,free"
5"192.168.153.132,root,123456,free"
6)
修改 start.sh 的运行权限
1chmod u+x start.sh
运行
1./start.sh
测试:
ssh ip地址 (测试是否可以登录)
安装 ElasticSearch下载地址: https://www.elastic.co/downloads/elasticsearch
1wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz
2cd /usr/local
3tar -zxvf elasticsearch-5.5.2.tar.gz
su tzs
切换到 tzs 用户下 ( 默认不支持 root 用户)
sh /usr/local/elasticsearch/bin/elasticsearch -d
其中 -d 表示后台启动
在 vmware 上测试是否成功:curl http://localhost:9200/
test
出现如上图这样的效果,就代表已经装好了。
elasticsearch 默认 restful-api 的端口是 9200 不支持 IP 地址,也就是说无法从主机访问虚拟机中的服务,只能在本机用 http://localhost:9200 来访问。如果需要改变,需要修改配置文件 /usr/local/elasticsearch/config/elasticsearch.yml 文件,加入以下两行:
1network.bind_host: 0.0.0.0
2network.publish_host: _nonloopback:ipv4
或去除 network.host 和 http.port 之前的注释,并将 network.host 的 IP 地址修改为本机外网 IP。然后重启,Elasticsearch
关闭方法(输入命令:ps -ef | grep elasticsearch
,找到进程,然后 kill 掉就行了。
如果外网还是不能访问,则有可能是防火墙设置导致的 ( 关闭防火墙:service iptables stop
)
修改配置文件:
1vim config/elasticsearch.yml
修改 :
1cluster.name : my-app (集群的名字,名字相同的就是一个集群)
2
3node.name : es1 (节点的名字, 和前面配置的 hosts 中的 name 要一致)
4
5path.data: /data/elasticsearch/data (数据的路径。没有要创建(`mkdir -p /data/elasticsearch/{data,logs}`),并且给执行用户权限 `chown tzs /data/elasticsearch/{data,logs} -R ` )
6path.logs: /data/elasticsearch/logs (数据 log 信息的路径,同上)
7network.host: 0.0.0.0 //允许外网访问,也可以是自己的ip地址
8http.port: 9200 //访问的端口
9discovery.zen.ping.unicast.hosts: ["192.168.153.133", "192.168.153.134", "192.168.153.132"] //各个节点的ip地址
记得需要添加上:(这个是安装 head 插件要用的, 目前不需要)
1http.cors.enabled: true
2http.cors.allow-origin: "*"
最后在外部浏览器的效果如下图:
安装 IK 中文分词可以自己下载源码使用 maven 编译,当然如果怕麻烦可以直接下载编译好的
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v5.5.2
注意下载对应的版本放在 plugins 目录下
解压
1unzip elasticsearch-analysis-ik-5.5.2.zip
在 es 的 plugins 下新建 ik 目录
1mkdir ik
将刚才解压的复制到ik目录下
1cp -r elasticsearch/* ik
删除刚才解压后的
1rm -rf elasticsearch
2rm -rf elasticsearch-analysis-ik-5.5.2.zip
IK 带有两个分词器ik_max_word :会将文本做最细粒度的拆分;尽可能多的拆分出词语
ik_smart:会做最粗粒度的拆分;已被分出的词语将不会再次被其它词语占有
安装完 IK 中文分词器后(当然不止这种中文分词器,还有其他的,可以参考我的文章 Elasticsearch 默认分词器和中分分词器之间的比较及使用方法),测试区别如下:
ik_max_word执行:
1curl -XGET 'http://192.168.153.134:9200/_analyze?pretty&analyzer=ik_max_word' -d '联想是全球最大的笔记本厂商'
结果:
1{
2 "tokens" : [
3 {
4 "token" : "联想",
5 "start_offset" : 0,
6 "end_offset" : 2,
7 "type" : "CN_WORD",
8 "position" : 0
9 },
10 {
11 "token" : "是",
12 "start_offset" : 2,
13 "end_offset" : 3,
14 "type" : "CN_CHAR",
15 "position" : 1
16 },
17 {
18 "token" : "全球",
19 "start_offset" : 3,
20 "end_offset" : 5,
21 "type" : "CN_WORD",
22 "position" : 2
23 },
24 {
25 "token" : "最大",
26 "start_offset" : 5,
27 "end_offset" : 7,
28 "type" : "CN_WORD",
29 "position" : 3
30 },
31 {
32 "token" : "的",
33 "start_offset" : 7,
34 "end_offset" : 8,
35 "type" : "CN_CHAR",
36 "position" : 4
37 },
38 {
39 "token" : "笔记本",
40 "start_offset" : 8,
41 "end_offset" : 11,
42 "type" : "CN_WORD",
43 "position" : 5
44 },
45 {
46 "token" : "笔记",
47 "start_offset" : 8,
48 "end_offset" : 10,
49 "type" : "CN_WORD",
50 "position" : 6
51 },
52 {
53 "token" : "本厂",
54 "start_offset" : 10,
55 "end_offset" : 12,
56 "type" : "CN_WORD",
57 "position" : 7
58 },
59 {
60 "token" : "厂商",
61 "start_offset" : 11,
62 "end_offset" : 13,
63 "type" : "CN_WORD",
64 "position" : 8
65 }
66 ]
67}
ik_smart执行:
1curl -XGET 'http://localhost:9200/_analyze?pretty&analyzer=ik_smart' -d '联想是全球最大的笔记本厂商'
结果:
1{
2 "tokens" : [
3 {
4 "token" : "联想",
5 "start_offset" : 0,
6 "end_offset" : 2,
7 "type" : "CN_WORD",
8 "position" : 0
9 },
10 {
11 "token" : "是",
12 "start_offset" : 2,
13 "end_offset" : 3,
14 "type" : "CN_CHAR",
15 "position" : 1
16 },
17 {
18 "token" : "全球",
19 "start_offset" : 3,
20 "end_offset" : 5,
21 "type" : "CN_WORD",
22 "position" : 2
23 },
24 {
25 "token" : "最大",
26 "start_offset" : 5,
27 "end_offset" : 7,
28 "type" : "CN_WORD",
29 "position" : 3
30 },
31 {
32 "token" : "的",
33 "start_offset" : 7,
34 "end_offset" : 8,
35 "type" : "CN_CHAR",
36 "position" : 4
37 },
38 {
39 "token" : "笔记本",
40 "start_offset" : 8,
41 "end_offset" : 11,
42 "type" : "CN_WORD",
43 "position" : 5
44 },
45 {
46 "token" : "厂商",
47 "start_offset" : 11,
48 "end_offset" : 13,
49 "type" : "CN_WORD",
50 "position" : 6
51 }
52 ]
53}
安装 head 插件elasticsearch-head 是一个 elasticsearch 的集群管理工具,它是完全由 html5 编写的独立网页程序,你可以通过插件把它集成到 es。
安装 git1yum remove git
2yum install git
3git clone git://github.com/mobz/elasticsearch-head.git 拉取 head 插件到本地,或者直接在 GitHub 下载 压缩包下来
安装nodejs先去官网下载 node-v8.4.0-linux-x64.tar.xz
1tar -Jxv -f node-v8.4.0-linux-x64.tar.xz
2mv node-v8.4.0-linux-x64 node
环境变量设置:
1vim /etc/profile
新增:
1export NODE_HOME=/opt/node
2export PATH=$PATH:$NODE_HOME/bin
3export NODE_PATH=$NODE_HOME/lib/node_modules
使配置文件生效(这步很重要,自己要多注意这步)
1source /etc/profile
测试是否全局可用了:
1node -v
然后
1mv elasticsearch-head head
2cd head/
3npm install -g grunt-cli
4npm install
5grunt server
再 es 的配置文件中加:
1http.cors.enabled: true
2http.cors.allow-origin: "*"
在浏览器打开 http://192.168.153.133:9100/
就可以看到效果了,
把坑都走了一遍,防止以后再次入坑,特此记录下来
1、ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
改变 elasticsearch 文件夹所有者到当前用户
1sudo chown -R noroot:noroot elasticsearch
这是因为 elasticsearch 需要读写配置文件,我们需要给予 config 文件夹权限,上面新建了 elsearch 用户,elsearch 用户不具备读写权限,因此还是会报错,解决方法是切换到管理员账户,赋予权限即可:
1sudo -i
2
3chmod -R 775 config
2、[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
原因是elasticsearch默认是不支持用root用户来启动的。
解决方案一:
1Des.insecure.allow.root=true
修改 /usr/local/elasticsearch-2.4.0/bin/elasticsearch
,
添加
1ES_JAVA_OPTS="-Des.insecure.allow.root=true"
或执行时添加:
上一篇: 弃繁就简!一行代码搞定 Python 日志!
下一篇: 坚果云和亿方云哪个更适合学校?