全文检索ElasticSearch到底是什么?

学习ElasticSearch之前,我们先来了解一下搜索

1 搜索是什么

① 概念:用户输入想要的关键词,返回含有该关键词的所有信息。

② 场景:

​ 1互联网搜索:谷歌、百度、各种新闻首页;

​ 2 站内搜索(垂直搜索):企业OA查询订单、人员、部门,电商网站内部搜索商品(淘宝、京东)场景。

2 数据库做搜索

当数据量小,简单搜索,可以使用数据库。

但是电商项目中,商品上亿条时,查询"笔记本电脑"等关键词时,上亿条数据的商品名字段逐行扫描,性能跟不上。而且不能分词,如搜索"笔记本电脑",只能搜索完全和关键词一样的数据,那么数据量小时,搜索"笔记本电脑","电脑"数据要不要给用户。

在当今互联网时代,搜索肯定不会使用数据库搜索。数据量太大,轻松达到PB级。

3 全文检索

全文检索,我们要用到倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

Lucene实现了倒排索引的理念,所谓Lucene就是一个jar包,里面封装了全文检索的引擎、搜索的算法代码。开发时,引入lucene的jar包,通过api开发搜索相关业务。底层会在磁盘建立索引库。

4 倒排索引

文章编号 文章内容
1 {ElasticSearch简称为ES,是一个全文搜索引擎}
2 {全文搜索引擎,比较火的有ElasticSearch还有Solr}
3 {最近微服务火爆,究竟什么是微服务呢}
4 {常见的微服务组件:Nacos、Seata、Dubbo}
5 {关于关系型数据库和非关系型数据库的讲解}

倒排索引

作为查询条件的,我们称为关键字

索引index 关键字 出现的位置
1 ElasticSearch 1,2
2 全文搜索引擎 1,2
3 搜索引擎 1,2
4 引擎 1,2
5 Solr 2
6 微服务 3,4
7 Nacos 4
8 Seata 4
9 Dubbo 4

5 数据库中索引的基本概念

所谓的索引其实就是数据目录

通常情况下,索引是为了提高查询效率

数据库索引分两大类:聚集索引、非聚集索引

聚集索引就是数据库保存数据的物理顺序,默认情况下就是主键id,所以按id查询数据库中的数据效率非常高

如果想在非主键的列添加索引,就是非聚集索引

使用索引需要注意的问题:

1.创建的索引会占用硬盘空间

2.创建索引之后,对该表进行增删改的操作时,会引起索引的更新,所以效率会降低

3.对数据库进行批量新增时,先删除索引,增加数据完毕之后再创建

4.不要对数据库样本少的列添加索引

5.当我们执行查询时,where条件后面应该先查询有索引的列

6.我们要明确查询条件,索引才会生效

数据库中有索引可以提高查询效率,但是模糊查询,会使用索引失效

模糊查询语句通常写成这样

sql 复制代码
SELECT title 
FROM item 
WHERE title LIKE "%手机%";

我们使用索引的前提是条件要明确,但是模糊查询使用的是前条件模糊查询,会使用索引失效

有人经过测试一张千万级别的数据库在数据库进行模糊查询时需要20秒以上的时间

当前互联网项目要求"三高"的需要下,效率太低了,不符市场需求

需要对查询进行优化,在课程项目中使用的ElasticSearch,优化后从同样的数据量的ES中查询相同的数据,效率能够提高100倍以上

ElasticSearch主要是为了解决数据库模糊查询性能低下的问题

上一篇文章:Quartz的使用-CSDN博客https://blog.csdn.net/Z0412_J0103/article/details/143355565下一篇文章:Elasticsearch的功能及概念-CSDN博客https://blog.csdn.net/Z0412_J0103/article/details/143556512

相关推荐
BillKu8 分钟前
Linux(CentOS)项目总结(前后端分离)
java·linux·mysql·nginx·centos
白如意i10 分钟前
如何在 CentOS 6 上设置 NFS 挂载
数据库·mysql·adb
生命几十年3万天18 分钟前
故事1111
java
一二小选手22 分钟前
【Java Web】EL表达式
java·servlet·el
编程修仙1 小时前
java的单例设计模式
java·单例模式·设计模式
南城花随雪。1 小时前
Spring框架之模板方法模式 (Template Method Pattern)
java·开发语言·模板方法模式
谦谦均1 小时前
PostgreSQL中的COPY命令:高效数据导入与导出
数据库·postgresql·oracle
不会编程的猫星人1 小时前
向量数据库PGVECTOR安装
数据库·postgresql·向量数据库
架构悟道1 小时前
不当愣头青、聊聊软件架构中的那些惯用的保命手段
java·分布式·架构·设计·高可用·可靠性·容错