一 ES介绍
# Elasticsearch产生背景
-大数据量如何存储和检索
# 补充:
-NoSql:not only sql,泛指非关系型的数据库
-Nginx的7层负载均衡和4层负载均衡
# Elasticsearch介绍
-是一个基于Lucene的分布式搜索和分析引擎
-是一个开源的高扩展的分布式 全文检索 引擎
它可以近乎实时的存储、检索数据;
本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据
-使用Java开发:安装jdk
-在Apache许可条款下开放源码发布
-是当前流行的企业级搜索引擎:稳定可靠,企业里普遍使用
-使用Lucene作为其核心来实现所有索引和搜索的功能
但目的是通过简单的RESTful API来隐藏Lucene的复杂性,使得全文检索变得简单
# 目前把它当成是存数据的地方,可以进行大数据量的存储,查询需要使用它
# Apache了解
-Apache公司
--开源组织,全球顶级的开源组织,开源了一些代码
--> 第三方机构要把自己的代码开源
--> 捐给Apache基金会
--> 安排人给维护开源项目
--顶级开源项目:Kafak,ES,百度Echars
-apache服务器:web服务器(nginx)
# 设计用途
用于分布式全文检索,通过HTTP使用JSON进行数据索引,速度快
# Lucene与Elasticsearch的关系
-Lucene是Java的一个库,只能java使用,并且复杂
-Elasticsearch是遵循restful规范 封装Lucene的功能,从而全文检索变得简单
# Elasticsearch vs solr
类似于mysql和oracle的关系
-都是分布式的搜索引擎,不是一个软件,核心本质一样 都是Java编写
-ES 基于Lucene
-ES 集成度高,solr需要更多插件支持
-Solr是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用
# ES核心概念
-Cluster: 集群 可单台搜索服务器,也可多台ES服务器配合使用
-Node : 节点 形成集群的每个服务器称为节点
-Shard : 分片 数据可以分为较小的分片 每个分片放到不同的服务器上
-Replia : 副本 为提高查询吞吐量或实现高可用性,副本是一个分片的精确复制,每个分片可以有零个或多个副本
-全文检索 : 在一篇文档中搜索要的内容
如果想查的数据快,肯定不是基于mysql的那种索引方式 ---> 基于倒排索引,实现的全文检索
全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句
全文索引就是把内容根据词的意义进行分词,然后分别创建索引
eg: “今日是周日我们出去玩” 可能会被分词成:“今天“,”周日“,“我们“,”出去玩“ 等token
这样当你搜索“周日” 或者 “出去玩” 都会把这句搜出来
# 与关系型数据库Mysql对比
mysql Elasticsearch
数据库 ---> 索引
表 ---> 类型 # es 6以后 一个索引下只能有一个类型, 7以后 完全不允许
行 ---> 文档
建表语句 ---> 映射
# 逻辑设计:文档(行数据) ---> 类型(表) ---> 索引(数据库)
# 物理设计
一个集群包含至少一个节点,而一个节点就是一个elasticsearch进程。节点内可以有多个索引
默认的,如果你创建一个索引,那么这个索引将会有5个分片(primary shard,又称主分片)构成
而每个分片又有一个副本(replica shard,又称复制分片),这样就有了10个分片
# ELK是什么: 做日志收集和分析系统
ELK = elasticsearch + Logstash + kibana
elasticsearch : 后台分布式存储以及全文检索
logstash : 日志加工、“搬运工”
kibana : 数据可视化展示
ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链
三者相互配合,取长补短,共同完成分布式大数据处理工作
# 我们的业务场景
-搜索功能 全文检索服务
-ES作为存储和检索服务器 来替代传统的NoSQL,它的横向扩展机制太方便了
# Elasticsearch索引到底能处理多大数据
理论上机器够,无限数据
一个es索引默认5个分片,一个分片是一个lucene索引
一个Lucene索引,不能处理多于21亿篇文档,或者多于2740亿的唯一词条
# haystack只支持es2版本 只支持6之前的版本
Haystack是django的开源全文搜索框架
该框架支持Solr、Elasticsearch、Whoosh(python写的全文检索服务 简单,不需要额外安装软件)

二 安装
1 ES安装
# ES服务端安装
-安装jdk1.8 以上 # 目前java19,85%以上的公司还在用1.8
https://www.oracle.com/java/technologies/downloads/#java8
-下载es版本 ---> 解压---> bin路径下---> elastcsearch.bat
https://www.elastic.co/cn/downloads/elasticsearch
# 浏览器输入:
http://127.0.0.1:9200/ # 能看到返回就安装成功
# 端口:
9100:ElasticSearch-head
9200:elasticsearch
5601:kibana
# ES客户端: 可视化工具
-浏览器 : 不能发送post请求
-postman : ES接受http的请求
-kibana : 官方提供
-elasticsearch-head : 第三方node写的
# 没有桌面版的客户端
2 kibana安装
# kibana: 官方提供的
-Kibana 是一款开源的数据分析和可视化平台
-Kibana 一定要跟es版本对应,用的都是7.5.0
# 官方下载 解压 就可以运行 bin\kibana或 kibana.bat
# 配置连接ES
-config文件夹下 kibana.yml文件
# kibana监听的端口和地址
server.port: 5601
server.host: "127.0.0.1"
server.name: lqz
# 连接哪个es服务器
elasticsearch.hosts: ["http://localhost:9200/"]
# 配置中文
-在config/kibana.yml添加
i18n.locale: "zh-CN"
# kibana主要是用来发送请求
http://localhost:5601/app/kibana#/dev_tools
3 elasticsearch-head安装
# elasticsearch-head : 第三方开发的 (node.js开发的,先装node环境)
https://github.com/mobz/elasticsearch-head
# 下载,解压
npm install # 安装依赖
npm run serve # 运行起来
# 配置跨域 会出现跨域问题
-ES服务端的 config文件夹下 elasticsearch.yml文件
# 添加配置时 :后必须空格,不然启动闪退
http.cors.enabled: true
http.cors.allow-origin: "*"
# 查看:浏览器输入
http://localhost:9100/
4 ES安装 官方/第三方插件
# 三种安装方式
# 推荐用第三种
官方插件地址:https://github.com/elastic/elasticsearch/tree/master/plugins
### 第一种:命令行
bin/elasticsearch-plugin install [plugin_name]
eg: bin/elasticsearch-plugin install analysis-smartcn # 安装中文分词器
### 第二种:url安装
bin/elasticsearch-plugin install [url]
eg: bin/elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-6.4.0.zip
### 第三种:离线安装
https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-6.4.0.zip
1.点击下载analysis-smartcn离线包
2.将离线包解压到ElasticSearch 安装目录下的 plugins 目录下
3.重启es # 新装插件必须要重启es
# 注意:插件的版本要与 ElasticSearch 版本要一致