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

相关推荐
常利兵5 分钟前
Spring项目新姿势:Lambda封装Service调用,告别繁琐注入!
java·数据库·spring
孤影过客9 分钟前
驯服数据巨兽:Hadoop如何重塑大数据的黄金时代
大数据·hadoop·分布式
第二只羽毛17 分钟前
C++ 高并发内存池1
大数据·开发语言·c++·开源
AI获客新方案@柯望望34 分钟前
想做线上获客,先搞懂GEO是什么意思,别再被忽悠了
搜索引擎
liqianpin141 分钟前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
sjmaysee43 分钟前
Java框架SpringBoot(一)
java·开发语言·spring boot
寒秋花开曾相惜1 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
想唱rap1 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
kgduu1 小时前
js之客户端存储
javascript·数据库·oracle
golang学习记1 小时前
IDEA 2026.1官宣:AI 建议免费了!
java·ide·intellij-idea