ElasticSearch 疯狂学习 第二季(自学)
由于数据量过大,遍历数据库查询进行逻辑判断过慢,为了提高数据查询速率,我打算使用elasticSearch检索去完成这一系列的操作(包括逻辑处理)。
那么开始主题吧!!!
首先我们先分析一下具体应该怎么做:
1.搭建环境
2.怎么将数据库数据导入到ElasticSearch的索引中
3.导入进去之后,数据应该怎么进行增删改查
4.什么方式请求elasticSearch服务器
5.增删改查的请求数据格式
6.返回结果中解析
一、搭建环境(Linux)
我使用的是elasticSearch-2.3.3版本,然后进入其bin目录直接启动即可。
当然也是可以自己更改一些配置信息的,配置文件config/elasticsearch.yml。
elasticsearch.yml :
cluster.name ----集群名(es会发现在同一网段下的es,如果同一个网段有多个集群,使用这个名称来区别)
node.name ----节点名 (默认指定一个es的jar包中config文件夹中的name.txt中的随机一个名字)
node.master ----该节点是否可以成为Master,默认为true
node.data ---- 该节点是否存储索引数据,默认为true
index.number_of_shards ----设置默认索引分片个数,默认为5
index.number_of_replicas ----设置默认索引副本个数,默认为1
path.conf ----设置配置文件的存储路径,默认是es根目录下的config文件夹
path.data ----设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径中间使用逗号隔开(path/to/data,path/to/data1)
path.work ---- 设置临时文件路径,默认是es根目录下的work文件夹
path.logs ---- 设置日志文的存储路径,默认是es根目录下的logs文件夹
path.plugins ---- 设置插件的存放路径,默认是es根目录下的plugins文件夹
bootstrap.mlockall ---- 锁住内存,默认为true
network.bind_host ---- 绑定IP地址,可以使ipv4或ipv6,默认为0.0.0.0
network.publish_host ---- 设置其他节点和该节点交互的IP地址,如果不设置它会自动判断,值必须是真实IP地址
network.host ---- 这个参数同时设置bind_host和publish_host上面两个参数
transport.tcp.port ---- 设置节点交互的Tcp端口,默认是9300
transport.tcp.compress ---- 设置是否压缩tcp传输时数据,默认是false
http.port ---- 设置对外服务的端口,默认是9200
http.max_content_length ---- 设置内容最大容量,默认100mb
http.enable ---- 是否开启http外对服务,默认true
gateway.type ---- 文件系统类型,默认local也就是本地文件系统,也可以是分布式文件系统、hadoop的HDFS等
gateway.recover_after_nodes ---- 设置集群中N个节点启动时进行数据恢复,默认为1
gateway.recover_after_time ---- 设置初始化数据恢复进程的超时时间,默认5分钟
gateway.expected_nodes ---- 设置集群中节点数量,默认为2
cluster.routing.allocation.node_initial_primaries_recoveries --- 初始化数据恢复时,并发恢复线程,默认为4
cluster.routing.allocation.node_concurrent_recoveries ---- 增加删除节点或负载均衡时并发恢复线程个数 ,默认为4
indices.recovery.max_size_per_sec ---- 设置数据恢复时限制的带宽,默认为0,即无限制
indices.recovery.concurrent_streams ---- 设置这个参数来限制从其他分片恢复数据时最大同时打开并发流的个数,默认为5
discovery.zen.minium_master_nodes ---- 设置这个参数来保证集群中节点可以知道其他N个有master资格的节点。默认为1
discovery.zen.ping.timeout ----- 设置集群中自动发现其他节点时ping连接超时时间,默认为3S
discovery.zen.ping.multicast.enable ---- 设置是否打开多播发现节点,默认为true
discovery.zen.ping.unicast.hosts ---- 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
下面开始部署elasticSearch(linux):
由于elasticSearch(简称es)使用的jdk版本最低需要1.7的,建议1.8.所以我在linux上新建elasticSearch用户,
将之Jdk配置为1.8版本,然后让es提供restful接口供客户端调用。
1.新建用户 -----adduser -d /home/elastic -m elastic
2.安装jdk1.8版本到elastic目录
3.配置elastic用户的.bash_profile文件
PATH=$PATH:$HOME/bin
export JAVA_HOME=/home/elastic/jdk1.8.0_65
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH
然后保存退出,并且重新加载源文件-------source .bash_profile
4.验证java版本----java -version
5.发现为1.8JDK后,将es解压到elastic目录下,并修改好yml文件配置,然后进入bin目录 启动elastic;
-----后台启动 ./elasticsearch -d
日志会显示最后为started;
然后登录验证elastic是否启动成功.
http://ip:9200/------------------若看到es的集群名和节点名、版本基本信息则代表启动成功
配置后台es-head插件
这个有两种安装方法:
1.在bin目录下有个plugin文件---------------------
./plugin install mobz/elasticsearch-head
或者
2.
https://github.com/mobz/elasticsearch-head下载zip 解压
然后在与bin同级目录下创建plugins文件目录,再创建head目录,将下载的文件解压到head中。
至此elasticsearch部署完毕。
下面我们来创建索引---文档,将数据库中数据导入到elasticsearch中
下载插件elasticsearch-jdbc-2.3.3.1 ,由于我们数据库使用的Mysql,所以找到mysql-state-example.sh配置文件,修改配置信息
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
bin=${DIR}/../bin
lib=${DIR}/../lib
echo '
{
"elasticsearch" : {
"type" : "jdbc",
"jdbc" : {
"cluster" : "xxx",
"url" : "jdbc:mysql://ip:3306/xxxx",
"host" : "ip",
"port" : 9300
},
"user" : "xxx",
"type" : "类型",
"password" : "xxx",
"sql" : "select * from xxx",
"index" : "索引",
},
"index_settings" : {
"index" : {
"number_of_shards" : 1
}
-Dlog4j.configurationFile=${bin}/log4j2.xml \
"metrics" : {
"enabled" : true
}
}
}
' | java \
-cp "${lib}/*" \
org.xbib.tools.JDBCImporter
org.xbib.tools.Runner \
然后执行配置文件,成功导入数据库中表信息到elasticsearch的索引--类型中。