您的位置:首页 > 其它

分布式搜索和分析引擎-Elasticsearch(安装和配置记录篇)

2016-06-22 00:00 471 查看
摘要: 我只是为了记录我的学习过程,让大家去参考和点评(有关Elasticsearch安装和配置的记录)

首先,我啰嗦几句,毕竟在这里能够顺便插条广告:我的第一篇博客文章即将在“开源中国”诞生!我为自己鼓掌!(因为这个世界缺少掌声,所以我们必须学会为自己鼓掌)

Elasticsearch,我接触了好几天,对网络上的很多杂牌文档不敢苟同。一篇有实际价值的文档,正如我的同事所说的一样,模仿一次、测试一次、在测试一次,如若能够顺利通过,则最后写出的文档才是一篇百分百值得信赖的文档。当然,不排除每个人的情况不同而差生的意外事件,就好像我每次根据网络文档去试验都能“成功”遇到很多大大小小的错误一样。但是,我不会气馁,因为换一个角度来说,这是上天赐予我的机会——让我在挫折中成长,以后就不会在遇到问题出现的时候措手不及了,因为我正年轻!

追根到底,网络上的文档不全面的原因还是因为以下几点:

第一、大多数人都喜欢复制黏贴或是直接转载变为自己的“作品”(这点是国内IT技术前进缓慢的障碍之一);

第二、得到网络上的“标准"文档后,“模仿”一遍后顺利呈现想要的效果,并且从未有机会走上满是”荆棘“的道路(这种在温室里成长的花骨朵一旦暴露在室外,可以想象到后果);

第三、国内的IT技术行业起步慢,国外的大牛精辟指导又不那么的”容易“传播到我们的国内(这个原因估计很多IT爱好者都很清楚,近几年有道墙筑起来之后我们就得花上更多的钱去翻墙了,别问我是什么或为什么,长这么大,我爸妈从没告诉过我)

================== 你↑我↓,骑着猪的公主 ==================

(有种运动的完美全程是这样划分的:第一个阶段美之曰”前戏“,第二个阶段谓其为”过程“,第三个阶段美之曰”高潮“。在这里,我的博客文章就用这三个阶段来向大家展示成果)

前戏:

系统:Linux (本本章环境是Debian7)

过程:

安装JAVA去支持ES :

1.解压:

tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/lib/jvm/

2.下面配置环境变量,使用vim /etc/profile命令编辑,在底部加入以下命令:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_91

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

3.使用source执行配置文件中的命令:

source /etc/profile

注:Elasticsearch安装至少需要Java 7的支持。如需了解Java的情况,可以到oracle的官网找相关的资料。所以,请在我们安装Elasticsearch前,请检查我们的Java版本运行:

java -version

安装elasticsearch :

下载页=> 官网:http://www.elasticsearch.com/

1.解压:

tar zxf elasticsearch-2.3.3.tar.gz -C /usr/local/

2.保证非ROOT用户对elasticsearch目录拥有修改的权限:chown -R situtao elasticsearch-2.3.3/

3.后台运行启动ES:bin/elasticsearch -d

注:默认情况下,Elasticsearch使用9200端口提供的REST API。该端口是可配置的。

4.检测:

在本机访问 curl 127.0.0.1:9200

{

"name" : "Vashti", //节点名是随机生成的,可自定义

"cluster_name" : "elasticsearch",

"version" : {

"number" : "2.3.3",

"build_hash" : "218bdf10790eef486ff2c41a3df5cfa32dadcfde",

"build_timestamp" : "2016-05-17T15:40:04Z",

"build_snapshot" : false,

"lucene_version" : "5.5.0"

},

"tagline" : "You Know, for Search"

}

高潮:

配置篇:

ElasticSearch的基本配置(这部分配置可以不理会,取默认值)

编辑文件${ESROOTPATH}/config/elasticsearch.yml

cluster.name:集群名称,es可以自我发现,拥有相同集群名字的ES会构成集群

node.name:节点名称,当前节点的名字,唯一性

node.master:是否允许当前节点成为master //设置为true,则能在master宕掉后使从节点自动参与选举

node.data:是否允许当前节点存储数据

index.number_of_shards:一个索引默认的shard数量 //自定义增加配置,默认是5个主分片

ndex.number_of_replicas:一个索引默认的副本数量 //自定义增加配置,默认是1个副分片

path.data:数据存储位置

path.logs :日志存储位置

bootstrap.mlockall:是否只使用内存(不使用swap)

PS:避免脑裂现象,用到的一个参数是:discovery.zen.minimum_master_nodes。这个参数决定了要选举一个Master需要多少个节点(最少候选节点数)。默认值是3。根据一般经验这个一般设置成 N/2 + 1,N是集群中节点的数量,例如一个有3个节点的集群,minimum_master_nodes 应该被设置成 3/2 + 1 = 2(向下取整)。主节点的个数最好是奇数个,并且不少于3个;但是会带来一个问题,如必须至少一半以上的主节点是可用的,如果不能满足这个要求,则系统就会崩溃。

我对ES的集群配置如下 ==>:

cluster.name: situtao-JQ //集群名要相同才能划分到同一个集群内

node.name: node-2 //节点名具有唯一性,每个节点名字都应独立

network.host: 192.168.3.254 //此处填写的是本机IP或VIP(具体根据自己的需要决定,也可以本机IP+VIP,IP间使用逗号","分隔开)

discovery.zen.ping.unicast.hosts: [192.168.3.81, 192.168.3.186, 192.168.3.254] //设置新节点被启动时能够发现的主节点列表(主要用于不同网段机器连接)

discovery.zen.minimum_master_nodes: 2

index.number_of_shards: 3

index.number_of_replicas: 1

index.cache.field.type: soft //默认类型为resident, 字面意思是常驻(居民), 一直增加,直到内存 耗尽。 改为soft就是当内存不足的时候,先clear掉 占用的,然后再往内存中放。设置为soft后,相当于设置成了相对的内存大小。resident的话,除非内存够大

discovery.zen.fd.connect_on_network_disconnect : true

自动(被)发现配置:

discovery.zen.initial_ping_timeout : 30s

discovery.zen.fd.ping_interval : 2s

discovery.zen.fd.ping_retries : 10

绑定本地IP,发送本地数据:



设置集群名称:



设置节点名称:



<== 集群配置END(注:)

重启ES服务,通过浏览器可以访问该机器上的ES服务:



安装监控插件:

1.安装elasticsearch-head :下载页面 ==>

http://mobz.github.io/elasticsearch-head/

安装方法:



安装命令:

./bin/plugin install mobz/elasticsearch-head

2.安装elasticsearch-kopf :

安装命令:

./bin/plugin install lmenezes/elasticsearch-kopf

监控运用实例:

重启ES服务,通过浏览器打开查看(以Head监控插件为例):(黑色实心表示此节点用于存储数据,星型代表主节点,圆点代表从节点)

1.操作,新建索引



2.返回ES概览查看:





安装ik分词器:

NO1:安装开发环境maven:

下载:(官网)

wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
安装:

确认JAVA安装完成:java -version



解压maven源码包:tar zxvf apache-maven-3.3.9-bin.tar.gz -C /usr/local/

添加环境变量:vim /etc/profile

export PATH=/usr/local/apache-maven-3.3.9/bin:$PATH



source /etc/profile 执行文件中的命令

验证:mvn --version



NO2:安装ik分词器:

版本对应:

IK version ES version

master 2.3.1 -> master

1.9.3 2.3.3

1.9.0 2.3.0

1.8.1 2.2.1

1.7.0 2.1.1

1.5.0 2.0.0

1.2.6 1.0.0

1.2.5 0.90.x

1.1.3 0.20.x

1.0.0 0.16.2 -> 0.19.0

下载:git clone https://github.com/medcl/elasticsearch-analysis-ik

手动安装过程:

cd elasticsearch-analysis-ik

mvn clean

mvn compile

mvn package

执行完以上命令会在当前目录生 target/releases/elasticsearch-analysis-ik-1.9.3.zip文件

创建ik插件目录:mkdir /usr/local/apache-maven-3.3.9/plugin/ik

cp target/releases/elasticsearch-analysis-ik-1.9.3.zip /usr/local/apache-maven-3.3.9/plugins/ik

cd /usr/local/apache-maven-3.3.9/plugins/ik

unzip elasticsearch-analysis-ik-1.9.3.zip

编辑ES配置文件,在末尾加入一行配置:

vim /usr/local/apache-maven-3.3.9/config/elasticsearch.yml

index.analysis.analyzer.ik.type : ik

测试IK的效果:

1.创建索引:

curl -XPUT 192.168.3.81:9200/new_index -d '

{

"mappings": {

"tags": {

"properties": {

"tags": {

"type":"string",

"index":"not_analyzed"

}

}

}

}

}'

2.返回测试结果:

curl 'http://192.168.3.81:9200/new_index/_analyze?analyzer=ik&pretty=true' -d '

{

"text":"世界如此之大"

}'

=>显示结果:

{

"tokens" : [ {

"token" : "世界",

"start_offset" : 0,

"end_offset" : 2,

"type" : "CN_WORD",

"position" : 0

}, {

"token" : "如此之",

"start_offset" : 2,

"end_offset" : 5,

"type" : "CN_WORD",

"position" : 1

}, {

"token" : "如此",

"start_offset" : 2,

"end_offset" : 4,

"type" : "CN_WORD",

"position" : 2

}, {

"token" : "之大",

"start_offset" : 4,

"end_offset" : 6,

"type" : "CN_WORD",

"position" : 3

} ]

}

3.添加数据:

curl -XPOST http://192.168.8.7:9200/new_index/fulltext/1 -d'

{"content":"美国留给伊拉克的是个烂摊子吗"}'

curl -XPOST http://192.168.8.7:9200/new_index/fulltext/2 -d'

{"content":"公安部:各地校车将享最高路权"}'

curl -XPOST http://192.168.8.7:9200/new_index/fulltext/3 -d'

{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}'

curl -XPOST http://192.168.8.7:9200/new_index/fulltext/4 -d'

{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}'

4.打开浏览器访问:

4.1 概览:


4.2 数据浏览:



4.3 基本查询:









4.4 复合查询:

{"query":{"function_score":{"query":{"multi_match":{"query":"如今的投资者只能以“呵呵”二字默认","type":"most_fields","fields":["title","content"]}},"functions":[{"field_value_factor":{"field":"hit","modifier":"log1p","factor":0.1}},{"field_value_factor":{"field":"reply","modifier":"log1p","factor":0.5}}],"boost_mode":"sum","max_boost":2}},"highlight":{"fields":{"pre_tags":["<tag1>","<tag2>"],"post_tags":["</tag1>","</tag2>"],"content":{},"title":{}}},"from":0,"size":100}





本博客仅为记录自己的学习,更多文献出自于经过我验证的网络,更多详细分析我会在后面的博文中持续的更新!(欢迎点评和给我更好的建议)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息