elastic:富有弹性的
search:搜索
此软件不再是SpringColud提供的,他也不针对微服务的项目开发
Elasticsearch和Redis/mysqly一样,不仅服务于java开发,其他语言也可以使用
它的功能类似于数据库,能高效的从大量数据中搜索匹配指定关键字的内容
数据保存在硬盘中
Es的底层:
使用了一套名为Lucene的API
这个API提供了全文搜索引擎核心操作的接口,相当于搜索引擎的核心支持,ES是在Lucene的基础上进行完善,实现了开箱即用的搜索引擎
市面上和ES功能类似的软件有:
Solr/MongoDB
为什么需要使用Elasticsearch?
数据库进行模糊查询效率严重低下
所有关系型数据库也有这个缺点:mysql\mariaDB\oracle\DB2等
Elaticsearch主要是为了解决数据库模糊查询性能低下问题
ES进行优化之后,从同样数据库的ES中查询相同条件数据,效率能够提高100倍以上
说到这里就不得不提一下数据库的索引 :
所谓的索引(index) 其实就是数据目录
通常情况下,索引是为了提高查询效率的
索引面试题
1.创建索引会占用硬盘空间
2.创建索引之后,对该表进行增删改操作时,会引起索引的更新,所以效率会降低
3.对数据库进行批量新增时,先删除索引,增加完毕之后再创建
4.不要对数据样本少的列添加索引
5.模糊查询时,查询条件前模糊的情况,是无法启用索引的
6.每次从数据表中查询的数据的比例越高,索引的效果越低
数据库索引分为两大类:
1.聚焦索引
2.非聚焦索引
所谓聚焦索引就是数据库保存数据的物理顺序依据,默认情况下就是主键id,所以按照id查询数据库中的数据效率非常高
而非聚焦索引则是如果在非主键上添加索引就是非索引聚焦了
而模糊查询时如查询'%XX',使用的就是前模糊条件,而使用索引又必须明确前面的内容是什么,所以前模糊查询是不能使用索引的,只能做全表的查询,但是查询效率低
所以当我们要做根据用户输入关键字进行模糊查询时, 需要使用全文搜索引擎来优化
Elasticsearch运行原理
要想使用ES来提高模糊查询效率
要先将数据库复制到ES中
在新增数据到ES中,ES可以对指定的列进行分词索引保存到索引库中
形成倒排索引结构
ES的简单使用:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
进行pom文件配置后,需要创建一个能向ES发送请求的文件
这种能向指定url发送请求的格式文件