一、ES的简单了解
借鉴自:https://blog.csdn.net/laoyang360/article/details/52244917
1.1 ES定义
- Elasticsearch是一个开源的高扩展的分布式全文检索引擎;
- 近乎实时的存储、检索数据;扩展性很好,可以扩展到上百台服务器,处理PB级别的数据;
- 使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能;但它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单;
- ES主要解决的问题:
1)检索相关数据;
2)返回统计结果;
3)速度要快;
1.2 ES核心概念
- Cluster:集群
- Node:节点
- Shard:分片
- Replia:副本
- 全文检索
1.3 ES工作原理
- 当ElasticSearch的节点启动后,它会利用多播(multicast)寻找集群中的其它节点,并与之建立连接。
1.4 与关系数据库Mysql的对比
- 在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET;
1.5 ELK
- elasticsearch:后台分布式存储以及全文检索;
- logstash: 中央数据流引擎,用于从不同目标收集的不同格式数据,过滤后支持输出到不同目的地;
- kibana:数据可视化,提供实时分析的功能;
1.6 对比Solr
- 当单纯的对已有数据(已经存在数据库中)进行搜索时,Solr更快;
- 当实时建立索引时,Solr会产生io阻塞,查询性能较差,ES具有明显优势;
- 随着数据量的增加,Solr的搜索效率会变得更低,而ES却没有明显的变化;
- 如果转变搜索基础设施,从Solr到ES,搜索性能可提高50x;
1.7 其他
- 解压即可使用;
- 仅支持json文件格式;
- ES更专注于核心功能,高级功能多由第三方插件提供;
- 实时性查询快;
二、ES学习笔记
2.1 安装
- ES安装:
版本:Elasticsearch7.6.1;
JDK1.8最低要求;保证JDK环境是正常的;
Elasticsearch客户端,界面工具;
ES版本和对应的Java的核心jar包,版本对应; - 熟悉目录:
录名 解释 in 启动文件 onfig 配置文件 onfig/log4j2 日志配置文件 onfig/jvm.options java虚拟机相关配置 onfig/elasticsearch.yml elasticsearch配置文件
(集群、日志信息、内存、网络等的配置)
默认9200端口!跨域问题配置!ib 相关jar包 og 日志 odules 功能模块 lugins 插件 - 启动elasticsearch.bat,访问9200
- 安装可视化界面elasticsearch-head
注意1:没有Node.js是不可以的,先看Vue安装基本环境;
注意2:9100跨域问题需要配置es; - 安装Kibana
注意:版本要和ES一致;5601;
汉化修改配置即可;
2.2 ES核心概念
- 一切都是JSON!
- 物理设计:
- Elasticsearch在后台把每个索引划分成多个分片,每个分片可以在集群中的不同节点间迁移;
- 集群(Cluster)是一个或多个节点(Node,一个单独的服务器)的集合,它们一起保存数据,并提供联合索引及搜索功能。集群存在一个唯一的名字身份,默认为“elasticsearch”;
- 集群至少有一个节点,一个节点可以有多个索引,创建一个索引时默认有5个分片(Shards)构成,每一个主分片会有一个副本(Replicas);主分片和对应的复制分片都不会在同一个节点内;
- 逻辑设计:
- 集群中包含多个索引,每个索引中包含多个类型,每个类型包含多个文档,每个文档中包含多个字段;
- 索引一篇文档时:索引>类型>文档ID,ID是整数或字符串;
- 索引(index):
- 索引是映射类型的容器,是一个非常大的文档集合;
- 索引存储了映射类型的字段和其他设置,然后被存储到各个分片上;
- 简单讲,索引就是数据库;
- 类型:
- 类型是文档的逻辑容器,类型中对于字段的定义称为映射(mapping);
- 可以不设置,Elasticsearch可以猜测,安全起见提前定义好映射;
- 文档(document):
- Elasticsearch是面向文档的,文档是索引和搜索数据的最小单位;
- 简单讲,文档就是一条条数据;
- 倒排索引
- 倒排索引:通过value去找key;
- 一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表;
- 每一个Elasticsearch分片是一个Lucene的索引;
2.3 IK分词器
- 下载,解压到插件文件夹,重启ES;
- ik_smart 最少切分
- ik_max_word 最细粒度划分
GET _analyze { "analyzer": "ik_smart", "text": "我爱作业帮" } GET _analyze { "analyzer": "ik_max_word ", "text": "我爱作业帮" }
2.4 Rest风格说明(Kibana)
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 通过文档id查询文档 |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
- 类型名称未来弃用,默认 _doc;
- 字段类型,见官方文档;
2.5 关于文档的基本操作
- 操作:
匹配
按照条件匹配
精确匹配
区间范围匹配
匹配字段过滤
多条件查询
高亮查询API 功能 “query” 构建对象 “_source” 结果过滤 “sort” 排序 “from”
“size”分页查询 “must” and “should” or “must_not” and "filter"
gt/lt/gte/ite过滤(大于/小于/大于等于/小于等于) “highlight” 高亮 - 关于分词:
term:直接查询精确的;
match:会使用分词器解析(先分析文档,再进行查询);