ElasticSearch入门与安装
什么是ElasticSearch
ElasticSearch 简称 ES ,是基于Apache Lucene构建的开源搜索引擎,是当前流行的企业级搜索引擎。Lucene本身就可以被认为迄今为止性能最好的一款开源搜索引擎工具包,但是lucene的API相对复杂,需要深厚的搜索理论。很难集成到实际的应用中去。但是ES是采用java语言编写,提供了简单易用的RestFul API,开发者可以使用其简单的RestFul API,开发相关的搜索功能,从而避免lucene的复杂性。
ES的基本概念
接近实时(NRT Near Real Time )
Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒内)
索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。索引类似于关系型数据库中Database 的概念。在一个集群中,如果你想,可以定义任意多的索引。
类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数 据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可 以为评论数据定义另一个类型。类型类似于关系型数据库中Table的概念。
NOTE: 在5.x版本以前可以在一个索引中定义多个类型,6.x之后版本也可以使用,但是不推荐;在7~8.x版本中彻底移除一个索引中创建多个类型
映射(Mapping)
Mapping是ES中的一个很重要的内容,它类似于传统关系型数据中table的schema,用于定义一个索引(index)中的类型(type)的数据的结构。 在ES中,我们可以手动创建type(相当于table)和mapping(相关与schema),也可以采用默认创建方式。在默认配置下,ES可以根据插入的数据自动地创建type及其mapping。 mapping中主要包括字段名、字段数据类型和字段索引类型
文档(document)
**一个文档是一个可被索引的基础信息单元,类似于表中的一条记录。**比如,你可以拥有某一个员工的文档,也可以拥有某个商品的一个文档。文档以采用了轻量级的数据交换格式JSON(Javascript Object Notation)来表示。
概念关系图
ES的单机安装
准备工作
开始本课程之前,先按文章
克隆一个虚拟机,修改主机名依次为:ElasticSearch01;修改ip地址依次为192.168.10.206。今天我们要是用的虚拟机环境就搭建完成了。
安装
-
下载安装包
http://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.0.tar.gz
也可以直接在Linux中通过
wget
命令直接下载,由于网速的原因这里先下载好压缩包在上传至Linux
-
解压缩安装包
cd到
/usr/tools
目录,执行以下命令tar -zxf elasticsearch-6.8.0.tar.gz
-
修改配置文件
cd到elasticSearch-6.8.0目录,执行vim命令
vim config/elasticsearch.yml
,设置network.host: 0.0.0.0
。默认情况下ElasticSearch是无法被外网访问的,这里将network设置成0.0.0.0不做限制 -
创建用户
ElasticSearch不能以root用户启动,否则启动时会报以下错误
首先执行命令
useradd christy
添加一个用户;其次执行以下命令echo "123456" | passwd christy --stdin
为新用户设置密码执行
ll
命令我们可以看到elasticSearch-6.8.0下面的目录及文件只有root用户有权限操作
所以新建完用户后要执行命令
chown -R christy:christy ./
将elasticSearch的操作权限赋给christy用户
仅仅修改以上配置还是不够的,后续我们用christy用户操作elasticSearch需要拥有管理员权限,所以这里还要设置christy的权限,执行命令
vim /etc/sudoers
,添加以下配置
注意:由于该文件是只读文件,修改完毕后保存记得加!强制保存
上述操作完毕后,我们切换到christy用户,执行启动命令,如下图
这个结果很长啊,这里直截取上面一段,这个启动是失败的,原因如下图
-
系统环境变量设置
上图的错误意思是最大文件描述符和虚拟内存太小导致的,后面给出了最小值。如果不知道当前系统的默认值可以使用命令
sysctl -a|grep vm.max_map_count
查看-
修改vm.max_map_count
执行命令
sudo vim /etc/sysctl.conf
添加内容vm.max_map_count=262144
如下
上面这个操作需要重启系统才能生效,如果不想重启系统可以执行命令
sysctl -w vm.max_map_count=262144
设置本次有效,设置完毕后使用上述提到的查看命令测试一下,如下图
-
修改JVM分配大小
执行命令
vim config/jvm.options
,修改-Xms和-Xmx的大小,这两个值视系统而定,但要一样
-
修改最大文件描述符数量和用户最大线程数
执行命令sudo vim /etc/security/limits.conf
添加如下内容后保存* soft nofile 65536 * hard nofile 65536 * soft nproc 4096 * hard nproc 4096
-
启动
执行命令bin/elasticsearch
启动,如果报错的话首先将系统重启一下再试,上面的方式是前台启动,一般提倡后台启动bin/elasticsearch -d
可以看到我们的elasticSearch已经成功的后台启动了,进程id是7206