介绍:
- Elasticsearch是一个基于
Lucene的搜索服务器
- 提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口
- Elasticsearch是用
Java语言
开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的
2-Elasticsearch特点
海量数据处理
- 大型分布式集群(数百台规模服务器)
- 处理PB级数据
- 小公司也可以进行单机部署
开箱即用
- 简单易用,操作非常简单
- 快速部署生产环境
作为传统数据库的补充
- 传统关系型数据库不擅长全文检索(MySQL自带的全文索引,与ES性能差距非常大)
- 传统关系型数据库无法支持搜索排名、海量数据存储、分析等功能
- Elasticsearch可以作为传统关系数据库的补充,提供RDBM无法提供的功能
ES和Solr对比
- Solr 利用 Zookeeper 进行分布式管理,
而 Elasticsearch 自身带有分布式协调管理功能
- Solr 支持更多格式的数据,而
Elasticsearch 仅支持json文件格式
- Solr 官方提供的功能更多,
而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供
- Solr 在传统的搜索应用中表现好于 Elasticsearch,
但在处理实时搜索应用时效率明显低于 Elasticsearch
ELK架构
3-Elasticsearch中的核心概念
3.1-ES角色:
- 实时性:从索引一个文档直到文档能够被搜索到有一个轻微的延迟
- 集群:通过联合索引和搜索功能的节点的集合,每一个集群有一个唯一的名称标识
- 节点:一个节点可以通过配置特定的名称来加入特定的集群
index
:一个索引就是还有某些共有特性的文档的集合,类似于MySQL的数据库type
:在6.x只允许有1个typedocument
:一个文档是一个基本的搜索单元mapping
:字段采用什么类型,字段是否需要分词,字段是否需要索引,是否需要保存(原始数据)- 参考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html
- setting:设置 用于对索引库的设置,比如索引库有多少分片,多少个副本。
- shard:分片,一个索引库可以被分为多个分片,默认为5
- replica副本,一个分片可以被分为多个副本,默认为2
- 流程:
es中
,存储数据的基本单位就是索引index,比如说es中存储了一些订单系统的销售数据,就因该在es中创建一个索引,order—index,所有的销售数据就会都写到这个索引里面去,一个索引就像数据库。而type就相当于每一张表,一个index里面可以有多个type,在高版本中只能设置1个type,而mapping就相当于表的结构定义,定义了什么字段类型等,你往index的一个type里添加一行数据就叫做一个document,每一个document有多个filed,每一个filed就代表这个document的一个字段的值。
3.2-图解
3.3 ES架构
- Client
- ES客户端,就是提交查询的地方
- index 在一个集群中,可以定义任意多的索引。
- 一个index包含很多document,一个index就代表了一类类似的或者相同的document
- 如说建立一个product index,商品索引,里面可能就存放了所有的商品数据,所有的商品document。
- 产品index+商品document
- type在高版本中就是1个
{
"product_id": "1",
"product_name": "长虹电视机",
"product_desc": "4k高清",
"category_id": "3",
"category_name": "电器",
"service_period": "1年"
}
- mapping
- 数据如何存放到索引对象上,需要有一个映射配置,包括:数据类型、是否存储、是否分词等。
- 分片:
- 当创建一个索引的时候,可以指定你想要的分片的数量,实现分布式读写
- 通过分片可以实现横向分布式扩展,并发查询等
- 副本:
- 一旦设置了副本,每个索引就有了主分片和副本分片,分片和副本的数量可以在索引创建的时候指定
4-ES练习Demo
- VSCODE测试
- 案例:
数据集:
4.1-创建索引
Elasticsearch中,我们可以使用RESTful API(http请求)来进行索引的各种操作。创建MySQL表的时候,我们使用DDL来描述表结构、字段、字段类型、约束等。在Elasticsearch中,我们使用Elasticsearch的DSL来定义——使用JSON来描述
。例如:
// 1. 使用PUT发送PUT请求
// 2. 索引名为 /job_idx
// 3. 判断是使用text、还是keyword,主要就看是否需要分词
PUT /job_idx
{
"mappings": {
"properties" : {
"area": { "type": "text", "store": true},
"exp": { "type": "text", "store": true},
"edu": { "type": "keyword", "store": true},
"salary": { "type": "keyword", "store": true},
"job_type": { "type": "keyword", "store": true},
"cmp": { "type": "text", "store": true},
"pv": { "type": "keyword", "store": true},
"title": { "type": "text", "store": true},
"jd": { "type": "text", "store": true}
}
}
}
4.2- ES中字段的类型
4.3-查看索引映射
GET /job_idx/_mapping
4.4-查看所有索引
GET _cat/indices
4.5-删除索引
delete /job_idx
--完整:
PUT /job_idx
{
"mappings": {
"properties" : {
"area": { "type": "text", "store": true, "analyzer": "ik_max_word"},
"exp": { "type": "text", "store": true, "analyzer": "ik_max_word"},
"edu": { "type": "keyword", "store": true},
"salary": { "type": "keyword", "store": true},
"job_type": { "type": "keyword", "store": true},
"cmp": { "type": "text", "store": true, "analyzer": "ik_max_word"},
"pv": { "type": "keyword", "store": true},
"title": { "type": "text", "store": true, "analyzer": "ik_max_word"},
"jd": { "type": "text", "store": true, "analyzer": "ik_max_word"}
}
}
}
GET /job_idx/_mapping
索引的增删改查完毕
4.6-添加数据
- 在Elasticsearch中,每一个文档都有唯一的ID
PUT /job_idx/_doc/29097
{
"area": "深圳-南山区",
"exp": "1年经验",
"edu": "大专以上",
"salary": "6-8千/月",
"job_type": "实习",
"cmp": "乐有家",
"pv": "61.6万人浏览过 / 14人评价 / 113人正在关注",
"title": "桃园 深大销售实习 岗前培训",
"jd": "薪酬待遇】 本科薪酬7500起 大专薪酬6800起 以上无业绩要求,同时享有业绩核算比例55%~80% 人均月收入超1.3万 【岗位职责】 1.爱学习,有耐心: 通过公司系统化培训熟悉房地产基本业务及相关法律、金融知识,不功利服务客户,耐心为客户在房产交易中遇到的各类问题; 2.会聆听,会提问: 详细了解客户的核心诉求,精准匹配合适的产品信息,具备和用户良好的沟通能力,有团队协作意识和服务意识; 3.爱琢磨,善思考: 热衷于用户心理研究,善于从用户数据中提炼用户需求,利用个性化、精细化运营手段,提升用户体验。 【岗位要求】 1.18-26周岁,自考大专以上学历; 2.具有良好的亲和力、理解能力、逻辑协调和沟通能力; 3.积极乐观开朗,为人诚实守信,工作积极主动,注重团队合作; 4.愿意服务于高端客户,并且通过与高端客户面对面沟通有意愿提升自己的综合能力; 5.愿意参加公益活动,具有爱心和感恩之心。 【培养路径】 1.上千堂课程;房产知识、营销知识、交易知识、法律法规、客户维护、目标管理、谈判技巧、心理学、经济学; 2.成长陪伴:一对一的师徒辅导 3.线上自主学习平台:乐有家学院,专业团队制作,每周大咖分享 4.储备及管理课堂: 干部训练营、月度/季度管理培训会 【晋升发展】 营销【精英】发展规划:A1置业顾问-A6资深置业专家 营销【管理】发展规划:(入职次月后就可竞聘) 置业顾问-置业经理-店长-营销副总经理-营销副总裁-营销总裁 内部【竞聘】公司职能岗位:如市场、渠道拓展中心、法务部、按揭经理等都是内部竞聘 【联系人】 黄媚主任15017903212(微信同号)"
}
4.7-更新数据
POST /job_idx/_update/29097
{
"doc": {
"salary": "15-20千/月"
}
}
4.8-删除数据
DELETE /job_idx/_doc/29097
4.9- 查看索引状态
GET _cat/indices?index=job_idx
#用户提交一个文档ID,Elasticsearch将ID对应的文档直接返回给用户。
GET /job_idx/_search
{
"query": {
"ids": {
"values": ["46313"]
}
}
}
# 搜索职位中带有「销售」关键字的职位
GET /job_idx/_search
{
"query": {
"match": {
"jd": "销售"
}
}
}
# 多个字段的查询
GET /job_idx/_search
{
"query": {
"multi_match": {
"query": "销售",
"fields": ["title", "jd"]
}
}
}