这篇教程主要是对在入门的elasticsearch的一个记录。node
基于 Dokcer ,单机安装 Docker 版集群。使用版本以下:git
整个安装步骤分红三部分:github
安装过程当中镜像拉取事件过长,这里笔者将docker镜像上传到阿里的docker仓库中。web
安装 ES 集群实例 elasticsearch001:spring
docker run -d -p 9200:9200 \ -p 9300:9300 \ --name elasticsearch001 -h elasticsearch001 \ -e cluster.name=lookout-es \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -e xpack.security.enabled=false \ registry.cn-hangzhou.aliyuncs.com/dingwenjiang/elasticsearch:5.3.2
命令解释以下:docker
docker run
: 会启动一个容器实例,若是本地没有对应的镜像会去远程registry上先下载镜像。-d
: 表示容器运行在后台-p [宿主机端口]:[容器内端口]
: 好比-p 9200:9200
表示把宿主机的9200端口映射到容器的9200端口--name
: 设置容器别名-h
: 指定容器的hostname-e
: 设置环境变量。这里关闭 x-pack 的安全校验功能,防止访问认证。经过curl http://localhost:9200/_cat/health?v=pretty
来验证elasticsearch001是否启动成功,以下:
设置环境变量的时候,咱们指定了-e cluster.name=lookout-es
,用于后续关联集群用。node为1 表示只有一个实例。默认 shards 分片为主备两个。status 状态是咱们要关心的,状态多是下列三个值之一:编程
也能够访问 http://localhost:9200/ ,能够看到成功运行的案例,返回的 JSON 页面。如图:json
继续搭建elasticsearch002:api
docker run -d -p 9211:9200 \ -p 9311:9300 --link elasticsearch001 \ --name elasticsearch002 \ -e cluster.name=lookout-es \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -e xpack.security.enabled=false \ -e discovery.zen.ping.unicast.hosts=elasticsearch001 \ registry.cn-hangzhou.aliyuncs.com/dingwenjiang/elasticsearch:5.3.2
启动elasticsearch002的时候增长了几个参数,安全
--link [其余容器名]:[在该容器中的别名]
: 添加连接到另外一个容器, 在本容器 hosts 文件中加入关联容器的记录。-e
: 设置环境变量。这里额外指定了 ES 集群的 cluster.name、ES 集群节点淡泊配置 discovery.zen.ping.unicast.hosts 设置为实例 elasticsearch001。再次执行curl http://localhost:9200/_cat/health?v=pretty
,结果如图:
对比上面检查数值能够看出,首先集群状态为 green , 全部的主分片和副本分片都已分配。你的集群是 100% 可用的。相应的 node 、shards 都增长。
接着安装Kibana,对elasticsearch进行监控,安装命令以下:
# 启动kibana docker run -d --name kibana001 \ --link elasticsearch001 \ -e ELASTICSEARCH_URL=http://elasticsearch001:9200 \ -p 5601:5601\ registry.cn-hangzhou.aliyuncs.com/dingwenjiang/kibana:5.3.2
其中-e 设置环境变量。这里额外指定了 ELASTICSEARCH_URL 为搜索实例地址。打开网页访问 127.0.0.1:5601,默认帐号为 elasti,密码为 changeme。会出现以下的截图:
这里只是简单整合下,开发一个web接口,实现数据存储以及查询功能。开发的思路仍是传统的三层架构,controller、service、dao,这里利用spring data来简化对es的curd操做。
项目的repo地址:https://github.com/warjiang/d...
整个项目的结构以下所示:
入口文件为:Application类,其中也是你们熟悉的spring-boot的用法。
controller主要在api包下,这里会暴露出两个API接口,分别是/api/contents
用于写入内容、/api/content/search
用于查询
service主要在service包下,与controller对应,须要实现写入和查询两个方法
dao主要在repository包下,继承ElasticsearchRepository,实现curd。
这里须要注意的时候,读写的bean用的是entity包下的ContentEntity,实际上services中操做的的bean是bean包下的ContentBean。
后续具体的实如今这里再也不赘述。
项目运行起来后,能够发送写入和查询的请求来测试功能的正确性。
写入请求:能够经过curl 或者postman构造一个请求以下:
POST /api/contents HTTP/1.1 Host: 127.0.0.1:8080 Content-Type: application/json Cache-Control: no-cache [ { "id":1, "title":"《见识》", "content":"摩根说:任意让小钱从身边溜走的人,必定留不住大钱", "type":1, "category":"文学", "read":999, "support":100 }, { "id":2, "title":"《态度》", "content":"人类的幸福不是来自偶然的幸运,而是来自天天的小恩惠", "type":2, "category":"文学", "read":888, "support":88 }, { "id":3, "title":"《Java 编程思想》", "content":"Java 是世界上最diao的语言", "type":2, "category":"计算", "read":999, "support":100 } ]
请求成功会返回以下所示:
{ "code": 0, "message": "success", "data": true }
写入成功后能够到kibana中查看写入结果,打开网页访问 localhost:5601,在 Kibana 监控中输入须要监控的 index name 为 content
。以下图,取消打钩,而后进入:
进入后,会获得如图所示的界面,里面罗列了该索引 content 下面全部字段:
打开左侧 Discover 栏目,便可看到可视化的搜索界面及数据:
随便打开一个json以下:
{ "_index": "content", "_type": "content", "_id": "2", "_score": 1, "_source": { "id": 2, "title": "《态度》", "content": "人类的幸福不是来自偶然的幸运,而是来自天天的小恩惠", "type": 2, "category": "文学", "read": 888, "support": 88 } }
查询请求:能够经过curl 或者postman构造一个请求以下:
POST /api/content/search HTTP/1.1 Host: 127.0.0.1:8080 Content-Type: application/json Cache-Control: no-cache { "searchContent":"Java", "type":2, "pageSize":3, "pageNumber":0 }
对应结果以下:
{ "code": 0, "message": "success", "data": { "pageNumber": 0, "pageSize": 3, "totalPage": 1, "totalCount": 1, "result": [ { "id": 3, "title": "《Java 编程思想》", "content": "Java 是世界上最diao的语言", "type": 2, "category": "计算", "read": 999, "support": 100 } ] } }
这里根据 searchContent 匹配短语 +type 匹配单个字段,一块儿构建了搜索语句。用于搜索出咱们期待的结果,就是《Java 编程思想》。