ElasticSearch实操入门(四)

一、ElasticSearch安装

        从ES 7.x版本开始,其发行的安装包中就已经内置了JDK。如果用户对JDK有独特的要求,可以修改其启动脚本进行依赖配置。

        从Download Elasticsearch | Elastic下载,解压安装文件,进入到解压后到文件夹,我们可以看到:

        目录        作用
        bin存放ES启动、关闭等脚本文件
        confES配置文件所在的目录
        jdkES自带的JDK目录
        libES运行所需要的jar目录
        logs存储ES的运行日志
        modules存储ES已安装的模块
                plugins        存储ES已安装的插件

        出于安全性考虑,ES不允许用root账户启动,应创建其他账户启动ES。在默认情况下,配置文件中ES进程占用的内存为1GB。如果计算机的内存较小,需要更改config/jvm.options配置文件,修改其中的-Xms和-Xmx参数值到合适的值即可。

ES启动:

  1. 当前会话启动:bin/elasticsearch
  2. 后台运行启动:bin/elasticsearch -d
  3. docker 启动:docker run -d -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.13.2

查看日志: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"
}

其中:

  • name为当前ES的实例名称,默认取值是当前服务器的主机名。
  • cluster_name为集群的名称,该项在配置文件中的默认值即为elasticsearch         

        当在同一个网络中部署多个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:

  • 对于旅馆标题来说,需要按照用户输入的关键词进行模糊搜索,因此应该定义成文本(text)型;
  • 对于所属城市来说,只需进行相等与否的判断,定义成普通的关键词类型(keyword)即可;
  • 对于房价来说,只需进行大小比较的判断,因此定义成数值中的双精度浮点型。

假设使用默认的分片数和副本数,整体的索引创建语句如下:

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
}

四、根据_id搜索文档

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对结果进行了打分计算,此处使用的是对文本打分计算的算法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天至尊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值