ElasticSearch
简称ES,基于Lucene全文检索引擎服务,支持分布式集群(数据横向扩展,分布式计算)
什么是全文检索:
全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程。
全文检索(Full-Text Retrieval(检索))以文本作为检索对象,找出含有指定词汇的文本。全面、准确和快速是衡量全文检索系统的关键指标。
关于全文检索,我们要知道:
-
只处理文本。
-
不处理语义。
-
搜索时英文不区分大小写。
-
结果列表有相关度排序。
全文检索原理:
应用场景:
1.全文检索或者搜索服务
2.Nosql(ES中的数据单元为JSON)
3.构建ELK数据分析平台–完整的数据分析的解决方案
关键术语:
1.NRT(near real time)
接近实时–数据存储后一秒后才能检索到
Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒内)
2.Cluster(集群)
3.Node(节点):一个es服务
4.Index(索引):倒排序索引结构–索引到数据的一种映射关系
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。索引类似于关系型数据库中Database 的概念。在一个集群中,如果你想,可以定义任意多的索引。
5.Type(类型)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数 据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可 以为评论数据定义另一个类型。类型类似于关系型数据库中Table的概念。
NOTE: 在5.x版本以前可以在一个索引中定义多个类型,6.x之后版本也可以使用,但是不推荐,在8.x版本中彻底移除一个索引中创建多个类型
6.Mapping(映射)
Mapping是ES中的一个很重要的内容,它类似于传统关系型数据中table的schema(结构),用于定义一个索引(index)中的类型(type)的数据的结构。 在ES中,我们可以手动创建type(相当于table)和mapping(相关与schema),也可以采用默认创建方式。在默认配置下,ES可以根据插入的数据自动地创建type及其mapping。 mapping中主要包括字段名、字段数据类型和字段索引类型
7.Document(文档)–es中的一条记录(json数据结构)
一个文档是一个可被索引的基础信息单元,类似于表中的一条记录。比如,你可以拥有某一个员工的文档,也可以拥有某个商品的一个文档。文档以采用了轻量级的数据交换格式JSON(Javascript Object Notation)来表示。
8.Field(字段或者域)–类似于Table中的Column
9.Replicas(复制)
10.Shard (分片)
环境搭建
准别工作:centos7 64位 es6.4.0 jdk1.8
1. 在官方网站下载ES
wget http://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz
-
安装JDK(必须JDK1.8+)
rpm -ivh jdk-8u181-linux-x64.rpm
/注意:默认安装位置 /usr/java/jdk1.8.0_171-amd64/ -
配置环境变量
vim /etc/profile
在文件末尾加入:
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin -
重载系统配置
source /etc/profile -
安装elasticsearche
tar -zxvf elasticsearch-6.4.1.tar.gz -
elasticsearche的目录结构
bin 可执行的二进制文件的目录
config 配置文件的目录
lib 运行时依赖的库
logs modules 运行时日志文件
plugins es中提供的插件 -
运行es服务
在bin目录中执行 ./elasticsearch注意:root用户启动[2018-09-19T14:50:04,029][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
-
不能以root用户身份启动
a.在linux系统中创建新的组
groupadd esb.创建新的用户es并将es用户放入es组中
useradd es -g esc.修改es用户密码
passwd esd.将root用户解压的文件移动到es用户目录中
mv /root/elasticsearch-6.2.4 /home/es/f.改变文件的所有者
chown -R es:es 当前es的安装目录(这里是:/home/es/elasticsearch) -
登录es用户启动ES
./elasticsearch 启动ES -
测试ES是否启动成功
在命令终端中执行: curl http://localhost:9200 出现以下信息:
{
“name” : “xQK1cwT”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “t7IYk7LKQ0mXcyyrdFWpLg”,
“version” : {
“number” : “6.2.4”,
“build_hash” : “ccec39f”,
“build_date” : “2018-04-12T20:37:28.497551Z”,
“build_snapshot” : false,
“lucene_version” : “7.2.1”,
“minimum_wire_compatibility_version” : “5.6.0”,
“minimum_index_compatibility_version” : “5.0.0”
},
“tagline” : “You Know, for Search”
} -
开启ES远程访问
vim elasticsearch.yml 将原来network修改为以下配置:
network.host: 0.0.0.0 -
启动时错误解决方案
a.重新启动es出现如下错误
ERROR: bootstrap checks failed[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方案:切换到root用户修改
vim /etc/security/limits.conf
在最后面追加下面内容
* soft nofile 65536 * hard nofile 65536 * soft nproc 4096 * hard nproc 4096
退出重新登录检测配置是否生效:
ulimit -Hn ulimit -Sn ulimit -Hu ulimit -Su
b.重新启动出现如下错误
ERROR: max number of threads [3802] for user [chenyn] is too low,increase to at least [4096]
解决方案:
#进入limits.d目录下修改配置文件。
vim /etc/security/limits.d/20-nproc.conf修改为 启动ES用户名 soft nproc 4096
c.重新启动出现如下错误
ERROR: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方案:
vim /etc/sysctl.conf
vm.max_map_count=655360
#执行以下命令生效:
sysctl -p -
关闭网络防火墙
systemctl stop firewalld
systemctl disable firewalld -
外部浏览器访问即可
http://es的主机名:9200 出现如下信息说明安装成功:
{
“name” : “xQK1cwT”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “t7IYk7LKQ0mXcyyrdFWpLg”,
“version” : {
“number” : “6.2.4”,
“build_hash” : “ccec39f”,
“build_date” : “2018-04-12T20:37:28.497551Z”,
“build_snapshot” : false,
“lucene_version” : “7.2.1”,
“minimum_wire_compatibility_version” : “5.6.0”,
“minimum_index_compatibility_version” : “5.0.0”
},
“tagline” : “You Know, for Search”
}
在线安装IK/拼音中文分词器