ElasticSearch之安装及基本操作API
ElasticSearch 是目前非常流行的搜索引擎,对海量数据搜索是非常友好,并且在高并发场景下,也能发挥出稳定,快速特点。也是大数据和索搜服务的开发人员所极力追捧的中间件。虽然 ElasticSearch 深受大家的喜爱,但是它的迭代速度之快,所以在相关社区老是有听说到学不动了的话语,也正是这种不断完善,才能拥有现在的社区活跃。我使用 ElasticSearch 时,从 5.x 到 6.x 版本,再到现在接触到 7.x 版本。从版本升级中,也看到了 ElasticSearch 对主流技术变化的拥抱,最明显的是新版 JDK 版本的支持及容器技术的支持。
安装
本文基于目前最新版本ElasticSearch-7.5.0
进行操作,如官网下载太慢,可在【ytao公众号】中发送es
获取下载链接。
安装环境及本文相关包:
操作系统 CentOS 7.5 64位
ElasticSearch 7.5.0
Kinbana 7.5.0
JDK 环境
ElasticSearch 在 7.x 中自带 JDK 环境,所以现在不一定要安装 JDK。默认是先判断当前服务器是否安装 JDK,如果安装了就使用服务器已安装的 JDK,否则会使用自带的 JDK,当然这个也是可以手动设置。
创建启动账号
由于 ElasticSearch 默认是不支持 root 账号权限启动,所以第一步要先创建启动账号。
创建一个 ElasticSearch 的运行组 es:
groupadd es
在 es 组中创建用户:
useradd elastic -g es
设置新用户密码:
passwd elastic
给解压出的 ElasticSearch 包授权:
chown -R elastic:es elasticsearch-7.5.0
修改配置文件
进入到/elasticsearch-7.5.0
目录,在config
目录里有个elasticsearch.yml
文件,修改里面当前需要的配置。
- cluster.name 是所属集群的名称
- node.name 当前节点名称
- network.host 当前节点所绑定地址,绑定到
0.0.0.0
所有的访问 - http.port 对外提供服务的端口号
- path.data 数据存储目录,这个我一般不适用默认目录,但是要给自定义的目录授权
- path.log 日志目录,和 path.data 类似配置
另外一个重要的配置,在当前目录中的jvm.options
文件设置。
这里设置堆内存大小,建议设置机器内存的 50% 大小。
-Xms4g
-Xmx4g
其他配置暂时没用到,暂不分析,今后的文章中用到再进行讲解。
启动
安装配置文件设置的值默认启动,直接执行./bin/elasticsearch
,果然不出乎所意料,启动异常。
上图中抛了两个异常。
- 第一个是说虚拟内存太小,至少需要 262144。
- 第二个当前默认配置不适合,[discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes]配置中至少有一个配置。
现在就增大服务器虚拟内存:
# 编辑 sysctl.conf 文件
vim /etc/sysctl.conf
# 在 sysctl.conf 中添加
vm.max_map_count=262144
# 查看刚设置的是否生效
sysctl -p
设置 cluster.initial_master_nodes 配置参数:
cluster.initial_master_nodes: ["node-1"]
再次启动完成后,没有异常抛出,访问ip:9200
,返回数据信息,其中包括集群名称,节点名,版本信息等等:
基本操作API
在进行 API 操作前先安装 kibana,以下命令执行将全部在 kibana 中执行。解压 kibana 后,在kibana.yml
中设置 ElasticSearch 地址elasticsearch.hosts: ["http://ip:9200"]
。通过bin/kibana
进行启动。安装比较简单,这里不做详细阐述。
索引操作
创建索引
创建 person 索引例子,number_of_shards 为分片数量,number_of_replicas 为索引的副本数,这里主要演示创建索引时可设置一些相关参数,且为非必填项。
PUT /person
{
"mappings" : {
"properties": {
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256 // 长度超过ignore_above设定的值,不会被索引或存储
}
}
}
}
},
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
执行命令结果:
查询索引
使用 GET 请求方式查询索引信息:
GET /person
返回结果
删除索引
使用 DELETE 请求方式:
# 删除 person 索引
DELETE /person
# 删除全部索引
DELETE /_all
# 通配符删除
DELETE /person*
mapping 操作
查询 person 索引的 mapping :
GET /person/_mapping
向 person 索引中添加 remark 字段,之前 mapping 中的 name 不会被删除,。
POST /person/_mapping
{
"properties" : {
"remark2" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
文档操作
添加文档
添加文档有两种方式,第一种就是使用指定索引的 type 添加文档,7.x开始,type 指定只能是 _doc 值,同时也是不支持多 type 的(ps:之前使用type主要用来将索引逻辑分区)。第二种就是使用 _create 进行创建数据。
index 方式添加文档
使用_doc
API向 person 中添加文档:
PUT /person/_doc/1
{
"name":"ytao",
"blog":"公众号 ytao",
"remark":"https://ytao.top"
}
添加文档后返回的数据:
上面命令执行过程,如果索引或 mapping 不存在,都会自动创建。这里的 id 我们也可以自动生成,但是请求不能使用 PUT 方式,要改为 POST 方式。
POST /person/_doc/
{
"name":"ytao",
"blog":"公众号 ytao",
"remark":"https://ytao.top"
}
如果上面我们插入 id 为 1 的文档重复执行,那么会先删除掉旧的文档,再引用新的文档,并且所对应的_version
版本号值会较之前的 +1。
create 方式添加文档
使用_create
API向 person 添加文档:
PUT /person/_create/2
{
"name":"yangtao",
"blog":"ytao's blog",
"remark":"coder"
}
这里 id 必须指明,否则添加失败,并且文档中已存在的 id 不能进行添加。
获取和查询文档
根据 id 获取文档
使用 GET 获取文档:
GET /person/_doc/1
返回数据中:
根据字段进行查询
使用_search
API进行查询,这里暂时不做深入讲解。
查询 name 为 ytao 的文档,并且通过from=0&size=2
分页查询。
# q 为查询参数,查询的字段和值用 : 进行分割
GET /person/_search?q=name:ytao&from=0&size=2
返回结果:
更新文档
更新文档使用 _update
API进行更新。更新内容必须包含在doc
中。更新对源数据只能是添加或修改字段,这也是和使用_doc
添加数据的区别,不是通过删除旧的文档进行更新的。
POST /person/_update/1
{
"doc":{
"blog":"ytao's blog"
}
}
删除文档
文档删除使用 DELETE 请求,然后指定 id:
DELETE /person/_doc/1
批量操作文档
批量处理可以一次请求中处理多个任务,使用_bulk
API进行。
下面就以索引添加方式添加一个文档到索引中,然后更新文档中 blog 字段为例。
POST _bulk
{"index":{"_index":"person", "_id":1}}
{"name":"ytao","blog":"公众号 ytao","remark":"https://ytao.top"}
{"update":{"_index":"person", "_id":1}}
{"doc":{"blog":"ytao's blog"}}
返回结果中,按每一个操作分别返回结果信息,当其中有请求错误时,不会影响其他请求操作。
批量获取文档
批量获取文档,使用_mget
API进行,通过一次指定多个文档 id,进行请求。
例如在 person 索引中获取 id 为 1,2 的文档:
POST _mget
{
"docs":[
{
"_index": "person",
"_id": 1
},
{
"_index": "person",
"_id": 2
}
]
}
返回结果:
批量查询文档
批量查询文档,使用_msearch
API进行,将多个查询整合到一个请求中。
下面就是分别在指定索引中查询的不同条件。
GET /person/_msearch
{"index":"person"}
{"query":{"match":{"blog":"ytao's blog"}}}
{"index":"person"}
{"query":{"match":{"remark":"coder"}}}
返回结果:
总结
本文对 ElasticSearch 的最基础的,常用的操作 API,这里已经介绍完毕。要想学习 ElasticSearch,建议从 API 操作入手,千万别上来就直接拿着代码就干,虽然各语言都已提供相关工具包,但是这些封装也都是基于 API 上的。更多的 API 在今后文章涉及时再进行分析。
更多 API 相关信息,建议查阅官网,这里有比较详细的介绍:
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/rest-apis.html
个人博客: [https://ytao.top](https://ytao.top)
关注公众号 【ytao】,更多原创好文

ElasticSearch之安装及基本操作API的更多相关文章
- Elasticsearch单机安装_集群搭建_索引基本操作_Head插件安装与基本操作_ik分词器配置_logstash实现数据同步_教程
一.Elasticsearch单机安装 1.将es安装包传到服务器上 这是安装包 这里我是用的是WinSCP上传工具,上传到/home/plugins文件下. 进入Xshell,验证一下是否上传成功. ...
- elk系列1之入门安装与基本操作【转】
preface 我们每天都要查看服务器的日志,一方面是为了开发的同事翻找日志,另一方面是巡检服务器查看日志,而随着服务器数量以及越来越多的业务上线,日志越来越多,人肉运维相当痛苦了,此时,参考现在非常 ...
- 如何在Elasticsearch中安装中文分词器(IK+pinyin)
如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...
- ElasticSearch搜索引擎安装配置中文分词器IK插件
近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...
- elasticsearch rpm 安装
参考:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-repositories.html Dow ...
- Linux初学 - Elasticsearch环境安装
下载 https://www.elastic.co/downloads/elasticsearch 安装 rpm -ivh 也可以双击rpm包安装 修改elastaticsearch host配置 修 ...
- centos 6.7下 elasticsearch的安装
1.下载elasticsearch的安装包,用ftp上传到linux系统下目录中,如在当前用户root的目录下新建目录elasticsearch,放入安装包 不要忘了添加执行权限 chmod +x * ...
- 转:ElasticSearch的安装和相关插件的安装
原文来自于:http://blog.csdn.net/whxaing2011/article/details/18237733 本文主要介绍如下内容: 1.ElasticSearch ...
- 使用SVG基本操作API
前面的话 本文将详细介绍SVG基本操作API,并使用这些API操作实例效果 基础API 在javascript中,可以使用一些基本的API来对SVG进行操作 [NS地址] 因为SVG定义在其自身的命令 ...
随机推荐
- 还是畅通工程 HDU - 1233
题目链接:https://vjudge.net/problem/HDU-1233 思路: 最小生成树板子. #include <iostream> #include <stdio.h ...
- 201871020225-牟星源《面向对象程序设计(java)》第十周学习总结
201871020225-牟星源<面向对象程序设计(java)>第十周学习总结 博文正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu- ...
- Docker安装(二)
一.前提条件 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上. Docker 运行在 Cent ...
- Dubbo介绍(一)
Dubbo是一个分布式.高性能.透明化的 RPC 服务框架,作用是提供服务自动注册.自动发现等高效服务治理方案. 一.Dubbo架构图 Provider:提供者,服务发布方 Consumer:消费者, ...
- Excel-数据透视表
例如: 购买数量采用求和的方式 用户数ID数据采用计数的方式 一.数据透视表的结构 二.数据透视表的步骤 1.订单表 提出问题,理解数据,数据清晰,构建模型,数据可视化 问题1:每个客户的订单量? 问 ...
- 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)
找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...
- Graphviz学习
(入门教程)[https://www.luogu.com.cn/blog/umr/graphviz]
- Python爬虫练习
例一:爬取信息关于'gbk' codec can't encode character '\xa0' in position 6: illegal 错误提示: #初始化class 得到对象 draw= ...
- [LeetCode] 834. Sum of Distances in Tree 树中距离之和
An undirected, connected tree with N nodes labelled 0...N-1 and N-1 edges are given. The ith edge co ...
- eclipse 设置所有文件编码为UTF-8(最全)
如何修改eclipse工作空间的字符集以及项目的字符集? 第一种方式:修改eclipse的配置文件 打开{ECLIPSE_HOME}/eclipse.ini文件 在最后一行加上属性: -Dfile ...