Elasticsearch 搜索引擎
Es 分布式 高性能 高可用 可伸缩的搜索和分析系统
一、大白话介绍Elasticsearch
1.1什么是搜索?
百度: 我们想找一个信息我们就去百度搜索一下,比如说找到我们喜欢的电影 书籍 新闻
百度 != 搜索
垂直搜索
互联网的搜索 电商网站 招聘网站 新闻网站 各种app
IT软件 OA软件 会议管理 日程管理 员工管理 项目管理 搜索 “张三 张三儿 张小三”
只要我们输入一些关键字 相关的信息
1.2如果用数据库做搜索会怎么样?
1)如果我们用数据库实现搜索 不靠谱, 通常来说就是性能太差了。
2) 还不能给我们把搜索词拆开。 尽可能去搜索更多的符合我们期望的结果。
用了es: 复仇者联盟 拆 复仇 联盟 复仇者
中华人民共和国 中华 人民 共和国 中国
3.什么是全文检索, 倒排索引和Lucene?
lucene 就是一个jar包。里面封装号了各种建立倒排索引的相关代码。 各种搜索的代码和各种算法。
查询时候就是就快了 但是保存的就消耗了时间
二、Elastcsearch 功能 适用场景和特点介绍
2.1 Elastcsearch 的功能干什么的
2.1.1 分布式 搜索引擎 和 数据 分析引擎
搜索: 百度 网站的站内搜索 。 it系统 检索
数据分析: 电商网站 最近7天时间牙膏这种商品销量排名前10商家
分布式: 搜索 数据分析
2.1.2 全文检索 结构化检索 数据分析
全文检索:select * from goods where 商品名字 like “%牙膏”
结构化检索: 我们想搜索商品的分类 都有哪些 select * from 商品 where type = “日化用户” 部分匹配 搜索纠错 搜索推荐
数据分析: 我们想知道最近7天内 牙膏 买的最好的10家商家。
2.1.3 对海量的数据进实时处理
分布式: es 自动将海量的数据分散到多台服务器上去搜索和检索
近实时 检索一个数据要花费一小时, 在秒级对数据进行搜索和分析
2.2 Elastcsearch 的使用场景能在什么地方发挥作用
2.2.1 百度百科
2.2.2 类似搜狐 新闻 用户行为日志 (点击 浏览 收藏 评论) 社交网络
2.2.3 IT程序报错信息 论坛 csdn 全文检索
2.2.4 电商网站 检索商品
2.2.4 日志数据分析 logstacsh 日志收集 es 进行复杂数据分析 kibana 可视化的展示
2.2.5 商品价格监控网站
2.2.6 BI系统
2.3 Elastcsearch 特点
2.3.1 可以做给一个大型的分布式集群(数百台服务器) 技术,可以处理 PB级别数据, 我们可以用在单机服务小公司
2.3.2 es 不是新技术 主要将 全文检索 数据分析 以及分布式 技术合并在了一起,才形成独一无二es lucene(全文检索)
2.3.3 对我们而言 。 是不是开箱即用。 非常简单 中小型应用 。 直接3分钟 部署一个es
2.3.4 数据库的功能很多领域是不够用。 特性功能 全文检索 同义词处理 相关度排名 复杂数据分析。 海量数据的近实时处理。
三、Elasticsearch 核心概念 NRT 索引 副本 分片
3.1 lucene和 Elasticsearch 前世今生
Lucene
最先进 , 功能最强大的搜索库 , 直接基于lucene开发 , 非常复杂 api 实现一些简单的功能。 都需要编写大量的代码 。
Elasticsearch
基于lucene , 隐藏复杂性,提供简单易用的restful api接口 , java api 接口 还有其他语言api 接口。
(1) 分布式的文档存储引擎
(2)分布式的搜索引擎和分析引擎
(3)分布式 支持PB级别
开箱即用,最优秀的默认参数 ,不需要额外配置。完全开源
3.2 Elasticsearch 的核心概念
3.2.1 Near Realtime: 近实时 , 两个意思 从写入数据到数据搜索有一个小延迟 大概1秒 , 基于es执行搜索 和分析可以达到秒级
3.2.2 cluster : 集群 包含多个节点, 每个节点属于集群是通过一个配置来决定。
3.2.3 Node: 节点集群中的一个节点, 节点有一个名字 名字随机分配的。 节点名字很重要, 默认节点会去加入一个es集群。
3.2.4 Document & field : 文档 es 中最小的单元。 一个document 一个客户数据 商品分类 订单数据 并且 json 的形式保存。 每个index 的tpye中。 可以存储多个document . 一个doucument 可以由好多个 field
{
“product_id”:“1”,
“product_name”:“牙膏”
}
3.2.5 Index: 索引 包含一堆由相似结构的文档数据。 比如说可以由一个客户索引。 商品分类索引 订单索引。
3.2.6 type: 类型 每个索引里可以由一个或者多个type,type 是index 的一个逻辑分类, 一个type下document 下多个field。
比如说一个博客系统 有一个索引 定义用户数据tpye 博客数据的tpye 评论数据type。
3.2.7 shard : 单台机器 无法存储大量的数据 , es 可以将一个索引中的数据切分为多个shard 。 分布在多个服务器上进行存储。
我们如果有了shard横向拓展,存储更加多的数据。 提高吞吐量和性能。 每个shard 都是一个lucene index。
3.2.8 replica : 副本 任何一个服务器随时可能故障或者宕机。 此时的shard 可能丢失。 因此可以为每个shard创建多个副本。 replica 可以在shard故障提高备用服务。 保证我们的数据不丢失。多个副本可以提升系统的吞吐量。 每个索引10shard
3.3 Elasticsearch 核心概念 vs 数据库核心概念
Elasticsearch | 数据库 |
---|---|
Document | 行 |
Type | 表 |
Index | 库 |
四、 Elasticsearch 搭建
4.1 上传Elasticsearch 的jar 至opt下
4.2 解压 elasticsearch-5.4.3.tar.gz
tar -zxvf elasticsearch-5.4.3.tar.gz -C /usr/local
4.3 es 启动 时需要非root用户 创建wcc用户
useradd wcc
4.4 为用户创建一个密码
passwd wcc
4.5 将wcc 赋予 root权限
vim /etc/sudoers
root ALL(ALL) ALL
WCC ALL(ALL) ALL
4.6 修改elasticsearch-5.4.3 所属者和所属组
chown -R wcc:wcc elasticsearch-5.4.3/
4.7 切换用户
su wcc
4.8 启动elasticsearch
./elasticsearch
4.9 第一个报错
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决修改文件数
vim vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
4.10 查看可打开的文件数量
ulimit -Hn
4.11 第二个报错
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=262144
4.12 可查虚拟内存的大小
sysctl -p
五、安装Es可视化插件
5.1 安装nodel
1) 在node官网下载安装包
2) 上传至服务器
3) 解压 tar -zxvf node
4) 配置环境变量 vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_201
export NODE_HOME=/usr/local/node-v14.8.0-linux-x64
export PATH=$PATH:$JAVA_HOME/bin:$NODE_HOME/bin
5.2 安装git
yum install -y git
-
git clone git://github.com/mobz/elasticsearch-head.git
-
cd elasticsearch-head
-
npm install
-
npm run start
-
open
http://localhost:9100/
问题
如果es-head 连接 es 连接不到 没有权限
vim /usr/local/elasticsearch-5.4.3/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
如果速度慢 请安装 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
集群监控值得几种状态:
绿色 : 最健康得状态 , 代表了所有分片包括备份都可用
黄色 : 基本分片可用 但是备份不可用 或者没有备份
红色: 部分得分片可用, 表明有一部分孙环。 此时得查询部分数据可以查到 。 遇到这个情况得时候就要赶紧修了。
灰色: 连接不到