1.Elasticsearch产生背景
2.Elasticsearch是什么
一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎
Elasticsearch使用Java开发:需安装jdk
Apache:
公司:开源协议
在它的条款下开源
很多主流的开源软件都捐献给Apache,让它维护
顶级开源项目:Kafka,ES,Echarts
Apache服务器:Web服务器(Nginx)
是当前流行的企业级搜索引擎:稳定可靠,企业里普遍使用
使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,使得全文检索变得简单
Lucene与Elasticsearch关系:
Elasticsearch与solr:
3.核心概念
集群:多太ES服务器的配合使用的集合称为集群。
节点:形成集群的每个服务器称为节点。
Shard:分片,数据可以分为较小的分片。每个分片放到不同的服务器上。
Replia:副本,为提高查询吞吐量或实现高可用性,副本是一个分片的精确复制,每个分片可以有零个或多个副本。
全文检索:在一篇文档中搜索要的内容,如果想查的数据快,肯定不是基于mysql的那种索引方式—基于倒排索引,实现的全文检索。
4.ES与关系型数据库Mysql对比
Mysql | ES |
---|---|
数据库 | 索引 |
表 | 类型 |
行 | 文档 |
建表语句 | 映射 |
5.物理设计
一个集群包含至少一个节点,而一个节点就是一个elasticsearch进程。节点内可以有多个索引。
默认的,如果你创建一个索引,那么这个索引将会有5个分片(primary shard,又称主分片)构成,而每个分片又有一个副本(replica shard,又称复制分片),这样,就有了10个分片。
6.ELK是什么
是日志收集和分析系统。
ELK=elasticsearch+Logstash+kibana
elasticsearch:后台分布式存储以及全文检索
logstash: 日志加工、“搬运工”
kibana:数据可视化展示
ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。
7.业务场景
8.Elasticsearch索引到底能处理多大数据
一个Lucene索引,不能处理多于21亿篇文档,或者多于2740亿的唯一词条
一个分片是一个lucene索引,一个es索引默认5个分片
ES安装:
安装jdk(java开发的)---->官网下载,解压---->启动即可(bin目录下bat文件)
在浏览器输入:http://127.0.0.1:9200/
ES客户端安装:
1.restful接口---->直接使用浏览器就可以访问
2.官方没有提供一个特别好的客户端
# 安装
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
# 启动
npm run start
配置跨域:修改es的配置
http.cors.enabled: true
http.cors.allow-origin: "*"
浏览器输入:http://localhost:9100/
server.port: 5601
server.host: "127.0.0.1"
server.name: lqz
elasticsearch.hosts: ["http://localhost:9200/"]
bin路径下启动kibana
浏览器访问:http://localhost:5601
由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而成为倒排索引。
反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
对文章内容进行分词,根据分词建立索引(出现的位置和出现的次数)。
索引等同于mysql中的数据库
haystack:django的app,实现全文检索
配置信息增删改查:
# 增
PUT lqz2
{
"settings": {
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}
# 删
DELETE lqz
# 查
# 获取lqz2索引的配置信息
GET lqz2/_settings
#获取所有索引的配置信息
GET _all/_settings
# 同上
GET _settings
# 获取lqz和lqz2索引的配置信息
GET lqz,lqz2/_settings
# 改(一般不改)
PUT lqz/_settings
{
"number_of_replicas": 1
}
在Elasticsearch 6.0.0或更高版本中创建的索引只包含一个mapping type。
在5.x中使用multiple mapping types创建的索引将继续像以前一样在Elasticsearch 6.x中运行。
Mapping types将在Elasticsearch 7.0.0中完全删除。
在创建索引的时候,可以预先定义字段的类型及相关属性,如果没有设置,es会自动设置。
Mapping是我们自己定义的字段数据类型,同时告诉es如何索引数据及是否可以被搜索。
作用:会让索引建立的更加细致和完善
字段及类型:
建立映射:
PUT books
{
"mappings": {
"properties":{
"title":{
"type":"text"
},
"price":{
"type":"integer"
},
"addr":{
"type":"keyword"
},
"company":{
"properties":{
"name":{
"type":"text"}