从ES 7.x版本开始,其发行的安装包中就已经内置了JDK。如果用户对JDK有独特的要求,可以修改其启动脚本进行依赖配置。
从Download Elasticsearch | Elastic下载,解压安装文件,进入到解压后到文件夹,我们可以看到:
目录 | 作用 |
bin | 存放ES启动、关闭等脚本文件 |
conf | ES配置文件所在的目录 |
jdk | ES自带的JDK目录 |
lib | ES运行所需要的jar目录 |
logs | 存储ES的运行日志 |
modules | 存储ES已安装的模块 |
plugins | 存储ES已安装的插件 |
出于安全性考虑,ES不允许用root账户启动,应创建其他账户启动ES。在默认情况下,配置文件中ES进程占用的内存为1GB。如果计算机的内存较小,需要更改config/jvm.options配置文件,修改其中的-Xms和-Xmx参数值到合适的值即可。
ES启动:
查看日志:tail -f logs/elasticsearch.log
当ES启动后,在其安装目录下会增加一个data目录,该目录主要用于存储索引数据文件。
启动完之后,我们可以通过curl http://127.0.0.1:9200 进行验证,其结果如下:
- {
- "name" : "7f78345d924a",
- "cluster_name" : "docker-cluster",
- "cluster_uuid" : "_NTwWUjwT2OHa9s2zHWXfw",
- "version" : {
- "number" : "7.13.2",
- "build_flavor" : "default",
- "build_type" : "docker",
- "build_hash" : "4d960a0733be83dd2543ca018aa4ddc42e956800",
- "build_date" : "2021-06-10T21:01:55.251515791Z",
- "build_snapshot" : false,
- "lucene_version" : "8.8.2",
- "minimum_wire_compatibility_version" : "6.8.0",
- "minimum_index_compatibility_version" : "6.0.0-beta1"
- },
- "tagline" : "You Know, for Search"
- }
其中:
当在同一个网络中部署多个ES集群时,将依靠cluster_name的值作为集群的唯一标识,各节点只有和集群下的其他节点的cluster_name值一致才能加入该集群中。在这种情况下,不同的集群节点需要将cluster_name的值定义为不同的名称。version内为当前集群版本及使用的Lucene组件等版本信息。
集群模式可以增强ES集群的服务性能或提升其高可用性,假设这3台计算机的IP地址分别为192.168.0.1、192.168.0.2和192.168.0.3,名称分别为es1、es2和es3,需要在这3台计算机上创建除root外的用户进行集群的搭建。
修改3台计算机的config/elasticsearch.yml文件。
在es1上需要修改的文件内容如下:
在es2上需要修改的文件内容如下:
在es3上需要修改的文件内容如下:
更改各节点配置后,可以按照任意顺序在3台计算机上运行bin/elasticsearch -d命令启动实例
执行curl http://192.168.0.1:9200/_cat/nodes?v命令,可以查看集群节点信息:
返回的信息中主要描述了当前集群中各个节点的IP地址及CPU的内存负载情况,另外还包括节点角色信息,其中,es1目前是集群中的master节点。ES集群中的master节点是由集群自动选举完成指派的,不需要额外指定。当然,如果用户对某些节点的角色有特殊的要求,可以更改config/elasticsearch.yml文件中的node.master或者node.data选项来完成配置。
比如我们建立一个旅馆的索引hotel:
假设使用默认的分片数和副本数,整体的索引创建语句如下:
- curl -H ‘Content-Type: application/json’ -XPUT http://127.0.0.1:9200/hotel -d ’{
- “mappings”:{
- “properties”:{
- “title”:{“type”:”text”},
- “city”:{“type”:”keyword”},
- “price”:{“type”:”double”}
- }
- }
- }’
Content-Type:application/json描述的是本次请求向目标URL传递JSON形式的参数
-XPUT是告诉服务方本次的请求类型为PUT
URL最后面的hotel就是将要创建的索引名称
为了简单起见,大家可以使用kibana的Dev Tools进行语句的操作,比如:
- PUT /hotel
- {
- “mappings”:{
- “properties”:{
- “title”:{“type”:”text”},
- “city”:{“type”:”keyword”},
- “price”:{“type”:”double”}
- }
- }
- }
在索引中创建了一条ID为001的文档:
- POST /hotel/_doc/001
- {
- "title":"java旅馆",
- "city":"深圳",
- "price":50.00
- }
GET /hotel/_doc/001
查询返回的结果中包括搜索的一些元数据,如是否找到、索引名称、文档ID值、文档版本等,在_source中展示了命中的文档的原始数据
在ES中进行搜索时需要用到query子句,其请求形式如下:
- GET /${index_name}/_search
- {
- "query":{
- ...
- }
- }
query子句可以按照需求填充查询项。假设按照城市进行搜索,把旅馆文档搜索出来。因为只需要进行文本是否相等的判断,所以需要用到term搜索:
- GET /hotel/_search
- {
- "query":{
- "term":{
- "price":{"value":50.00}
- }
- }
- }
如果要对文本进行模糊匹配并给出匹配分数,可以使用match搜索对某个字段进行模糊匹配,比如按照标题进行模糊搜索:
- GET /hotel/_search
- {
- "query":{
- "match":{"title":"java"}
- }
- }
此时ES对结果进行了打分计算,此处使用的是对文本打分计算的算法