全文检索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

相关推荐
步行cgn22 分钟前
Spring 全注解开发详解
java·后端·spring
数字化顾问35 分钟前
(138页PPT)流程体系的建设优化与运营(附下载方式)
大数据·运维·人工智能
长河38 分钟前
Java的GC(垃圾回收)中,标记无用对象的核心方法是可达性分析算法
java·jvm·算法
梦想不只是梦与想1 小时前
对象存储服务器vs数据库
数据库·对象存储·图片存储
code2cat1 小时前
Java进阶篇之LongAdder:把统计更新分散,再读取总和
java·并发编程·原子类·longadder
织码weavecodes1 小时前
培训平台部署备份与容灾:从三服务交付到可恢复运行
大数据·学习·开源软件
凯哥Java1 小时前
写代码怎么避免逻辑漏洞?
java·开发语言·人工智能·自动化
Ivanqhz1 小时前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
IT大白鼠2 小时前
搜索系列 · 第 06 篇——避坑汇总:经典生产问题
elasticsearch·nosql
Ivanqhz2 小时前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法