一、概述
1、ES简介以及发展历史
Search is something that any application should have
1.1、ES应用领域
- 订单搜索
- 商品推荐
- 集中化日志管理
- 风险控制
- IT运维
- 安全监控
开源分布式搜索分析引擎,基于Lucene引擎。
Lucene具有高性能、易扩展的优点
Lucene的局限性:
- 只能基于java开发
- 类库的接口学习曲线陡峭
- 原生不支持水平扩展
2004基于Lucene开发了Compass
2010重写了Compass取名为ElasticSearch
- 支持分布式,可水平扩展
- 降低全文搜索的学习曲线,可以被任何编程语言使用
支持多种方式集成接入
多种编程语言的类库(java/,NET/Python/Ruby/PHP/Groovy/Perl)
Restful API
JDBC&ODBC
1.2、Elasticsearch 的主要功能
- 海量数据的分布式存储以及集群管理
- 近实时搜索,性能卓越
-
1.3、ElasticSearch版本特性
新特性5.X版本
1、Lucene 6.X,性能提升,默认打分机制从TF-IDF改为BM25
2、支持Ingest节点/Painless Scripting/Completion suggested 支持/原生的Java REST客户端
3、TYPE标记成deprecated,支持了Keyword类型
4、性能优化 内部引擎移除了避免同意文档并发更新的竞争锁,带来15%-20%的性能提升
- Instant aggregation,支持分片上聚合的缓存
-
新特性6.X版本
1、Lucene 7.X
2、新功能(跨集群复制CCR、索引生命周期管理、SQL的支持)
3、更友好的升级及数据迁移
4、性能优化 有效存储稀疏字段的新方法,降低了存储成本
-
新特性7.X版本
1、Lucene 8.0
2、重大改进——正式废除一个索引下多个Type的支持
3、7版本开始有安全认证Security功能
4、ECK——Elasticsearch Operator On Kubernetes
5、新功能 New Cluster coordination
- Feature——Complete High Level REST Client
- Script Score Query
6、性能优化
- 默认的主分片数从5该为1,避免over sharding
- 性能优化,更快的TOP K
2、Elastic Stack家族成员及其应用
Logstash:开源的服务器端数据处理管道,支持从不通来源采集数据,转换数据,并将数据发送到不通的存储库中
kibana:可视化分析利器,Kiwifruit+Banana
Beats:轻量的数据采集器
X-Pack:商业化套件
二、安装上手
1、Es的安装与简单配置
es的相关目录结构
目录 | 配置文件 | 相关描述 |
---|---|---|
bin | 脚本文件,启动es,安装插件,运行统计数据等 | |
config | elasticsearch.yml | 集群配置文件 |
JDK | java运行环境 | |
data | path.data | 数据文件 |
lib | java类库 | |
logs | path.log | 日志文件 |
modules | 包含所有es模块 | |
plugins | 包含所有已安装插件 |
JVM配置
修改jvm-jvm.options
- xmx和xms设置程一样的
- xmx不要超过内存的50%
- 不要超过30GB
三、ElasticSearch入门
1、基本概念:索引、文档和RESTAPI
1.1、文档
Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位
eg:日志中的日志项、一部电影的具体信息
文档会序列化成json格式,保存在es中,json对象由字段组成、每个字段都有对应的字段类型
每个文档都有一个唯一id(可以指定ID,或者es自动生成)
文档的元数据:用于标注文档的相关信息
- _index:文档所属的索引名
- _type:文档所属的类型名
- _id:文档唯一ID
- _source:文档的原始json数据
- _all:整合所有字段内容到该字段,已被废除
- _version:文档的版本信息
- _score:相关性打分
{
"_index" : "myindex",
"_type" : "_doc",
"_id" : "4WPt6nwBm15aYb-7A4VW",
"_score" : 1.0,
"_source" : {
"id" : 1,
"name" : "wayne"
}
}
1.2、索引
Index索引是文档的容器,是一类文档的结合
index体现了逻辑空间的概念,每个索引都有自己的mapping,用于定义包含的文档字段名和字段类型
Shard体现了物理空间的概念,索引中的数据分散在shard上
索引的mapping设置字段的映射关系,setting设置不同的数据分布
索引的不同语义GET /myindex?pretty
{
"myindex" : {
"aliases" : { },
"mappings" : {
"properties" : {
"id" : {
"type" : "long"
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1636028973699",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "zJSEZbokTEWQ3rcxcEagUw",
"version" : {
"created" : "7060099"
},
"provided_name" : "myindex"
}
}
}
}
名词:一个es集群中,可以创建很多个不同的索引
动词:保存一个文档到es集群的索引中的这个过程
抽象和类比
RDBMS | ElasticSearch |
---|---|
table | index |
row | doc |
colounm | filed |
schema | mappig |
sql | dsl |
1、在7.0版本之前,一个index可以设置多个type
2、目前Type已经被废弃,现在一个索引只能建一个type “_doc”
3、传统关系型数据库和es的区别
es —Schemaless/相关性/高性能全文检索
rdms—事务性/Join