转载*请注明原始出处:http://blog.csdn.net/a464057216/article/details/50900624
2017.03.20更新:适用于elasticsearch-5.2.2
后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
- 安装Elasticsearch
安装Elasticsearch 5.2.2版本之前推荐先阅读ELK实时日志分析平台之Elasticsearch简介。
Elasticsearch依赖Java 8及其以上版本的JRE,可以使用java -version查看JRE版本。
如果系统未安装Java,可以选择使用开源的OpenJRE,安装命令如下:
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jre
也可以选择安装Oracle Java 1.8.0_121及以上。
为了安装和使用的简介性,推荐下载官网的.tar.gz包解压缩即可。
- 配置Elasticsearch
Elasticsearch的配置目录(/etc/elasticsearch/)下有如下两个配置文件:
elasticsearch.yml:配置Elasticsearch服务器除了日志以外的所有配置。
logging.yml:配置日志,初期使用Elasticsearch时使用默认配置就可以,默认的日志目录在/var/log/elasticsearch中。
在任何一个安装了Elasticsearch的服务器上,首先要配置的是节点名字(node.name)和集群名字(cluster.name),节点名字指定服务器在整个集群中的名称标识,集群名字指定服务器绑定到哪一个集群。或者在启动时指定集群及节点名字:
$ ./bin/elasticsearch --cluster.name my_cluster_name --node.name my_node_name
如果不指定这两个名字,Elasticsearch在启动是会随机一个节点名字,集群名字使用默认的elasticsearch。当然,推荐的做法是指定这两个名字,不然可能会在某个集群中出现不该出现的节点。
还有一个常用的配置是path.data,定义数据的存储路径(需要保证Elasticsearch对其有写的权限),默认在/var/lib/elasticsearch中。在实际生产环境中,推荐使用一个单独的分区挂载点作为elasticsearch的专用数据存储空间,这样方便数据隔离,也会使Elasticsearch性能更佳。
- 启动Elasticsearch
配置完Elasticsearch后,可以使用如下命令启动Elasticsearch服务:
$ sudo service elasticsearch start
通常进程启动需要一段时间,可以使用$ ps -aux | grep elasticsearch命令查看,如果启动失败,可以查看/var/log/elasticsearch目录下面的log定位失败原因。
- Elasticsearch的安全设置
Elasticsearch并没有内置安全模块,网络上任何可以通过HTTP的API接口访问Elasticsearch的人都可以控制它,所以首先要防止网络上的公开访问,在elasticsearch.yml中开启如下配置:
network.host: localhost
- 使用Elasticsearch
首先需要确认服务器上的Elasticsearch可以正常工作,使用如下curl命令:$ curl http://localhost:9200,如果得到类似如下的输出,证明Elasticsearch工作正常:
{
"name" : "lmz1",
"cluster_name" : "lmz-clusters",
"version" : {
"number" : "2.2.1",
"build_hash" : "d045fc29d1932bce18b2e65ab8b297fbf6cd41a1",
"build_timestamp" : "2016-03-09T09:38:54Z",
"build_snapshot" : false,
"lucene_version" : "5.4.1"
},
"tagline" : "You Know, for Search"
}
Elasticsearch使用RESTful API,通常使用CRUD命令(Create、Read、Update、Delete)操作。下面演示数据的添加:
$ curl -XPOST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
会收到如下响应:
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}
添加数据的请求的URI是/tutorial/helloworld/1,其中:
tutorial是数据在Elasticsearch中的索引
helloworld是类型
1是数据在上述索引和类型中的id号
在/var/lib/elasticsearch/virtual-test/nodes/0/indices目录下可以观察到多了tutorial的目录。使用如下命令可以查询刚刚添加的数据:
$ curl -XGET 'http://localhost:9200/tutorial/helloworld/1'
会收到如下响应:
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}
使用如下命令可以更新刚刚添加的数据:
$ curl -XPUT 'http://localhost:9200/tutorial/helloworld/1?pretty' -d '
{
"message": "Hello People!"
}'
会收到如下响应:
{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : false
}
注意更新后该数据项的id还是1,但是version变成了2。
curl命令末尾的pretty参数允许以人类可读的形式提供输入参数(所以在发送PUT请求时可以多行输入),当然,在发送GET类型的查询请求时,也可以使用pretty参数获得格式化的输出,比如:
$ curl -XGET 'http://localhost:9200/tutorial/helloworld/1?pretty'
{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"found" : true,
"_source":
{
"message": "Hello People!"
}
}
删除某个数据项可以使用如下命令:
$ curl -XDELETE 'http://localhost:9200/tutorial/helloworld/1'
{"found":true,"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"_shards":{"total":2,"successful":1,"failed":0}}
之后使用GET请求查询会发现数据项已经被删除了:
$ curl -XGET 'http://localhost:9200/tutorial/helloworld/1?pretty'
{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"found" : false
}
使用如下命令可以删除tutorial索引:
$ curl -XDELETE 'http://localhost:9200/tutorial'
{"acknowledged":true}
如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!