一.了解ES
Elasticsearch
是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容
**Elasticsearch
**结合kibana、Logstash、Beats,也就是elasticstack(ELK)。被广泛应用在日志数据分析、实时监控等领域
Lucene
是一个Java语言的搜索引擎类库
官网地址:https://lucene.apache.org/
优势 | 缺点 |
---|---|
易扩展 | 只限于Java语言开发 |
高性能(基于倒排索引) | 学习曲线陡峭 |
不支持水平扩展 |
Elasticsearch具备一下优势:1.支持分布式,可水平扩展;2.提供Restful接口,可被任何语言调用
二.正向索引与倒排索引
-
传统的MySQl数据库采用正向索引:基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条
-
elasticsearch采用倒排索引:对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档
-
文档:每条数据都是一个文档
-
词条:文档按语义分成的词语
-
三.基本概念
文档
索引:相同类型的文档集合
映射:索引中文档的字段约束信息,类似表的结构约束
对比
MySQL | ElastiGsearch | 说明 |
---|---|---|
Table | Index | 索引(index),就是文档的集合,类似数据库的表(table) |
ROW | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |
CoLumn | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |
SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |
架构
- Mysql:擅长事务类型操作,可以确保数据的安全和一致性
- Elasticsearch:擅长海量数据的搜索、分析、计算
索引库
一.mapper属性
mapping是对索引库中文档的约束,常见的mapping属性包括:
-
type:字段数据类型,常见的简单类型有:
- 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
- 数值:long、integer、short、byte、double、float、
- 布尔:boolean
- 日期:date
- 对象:object
-
index:是否创建索引,默认为true
-
analyzer:使用那种分词器
-
properties:该字段的子字段
二.创建索引库
ES中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和mapping的DSL语法如下:
示例:
三.修改索引库
原则上索引库一旦创建就无法修改,但是可以添加新的字段,语法如下:
PUT /索引库名/_mapping
{
"properties":{
"新字段名":{
"type":"integer"
}
}
}
#查询索引库
GET /索引库名
示例:
四.删除索引库
DELETE /索引库名
文档操作
一.添加文档(DSL语法)
POST /索引库名/_doc/文档id
{
"字段1":"值1",
"字段2":"值2",
"字段3":{
"子属性":"值3"
},
// .....略
}
二.查看、删除文档
#查询文档
GET /索引库/_doc/文档id
#删除文档
DELETE /索引库/_doc/文档id
三.修改文档
(一)方式一:全量修改,会删除旧文档,添加新文档
PUT /索引库/_doc/文档id
{
"字段1":"值1",
"字段2":"值2",
// .....略
}
(二)方式二:增量修改,修改指定字段值
POST //索引库/_doc/文档id
{
"doc":{
"字段1":"新值1",
"字段2":"新值2",
// .....略
}
}