当前位置: 首页 > article >正文

全文检索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关键字出现的位置
1ElasticSearch1,2
2全文搜索引擎1,2
3搜索引擎1,2
4引擎1,2
5Solr2
6微服务3,4
7Nacos4
8Seata4
9Dubbo4

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

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

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

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

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

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

使用索引需要注意的问题:
1.创建的索引会占用硬盘空间
2.创建索引之后,对该表进行增删改的操作时,会引起索引的更新,所以效率会降低
3.对数据库进行批量新增时,先删除索引,增加数据完毕之后再创建
4.不要对数据库样本少的列添加索引
5.当我们执行查询时,where条件后面应该先查询有索引的列
6.我们要明确查询条件,索引才会生效

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

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

SELECT title 
FROM item 
WHERE title LIKE "%手机%";

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

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

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

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

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

上一篇文章:Quartz的使用-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Z0412_J0103/article/details/143355565下一篇文章: Elasticsearch的功能及概念-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Z0412_J0103/article/details/143556512


http://www.kler.cn/a/382544.html

相关文章:

  • 计算机网络之HTTP协议
  • 人工智能之人脸识别(人脸采集人脸识别)
  • 内网项目,maven本地仓库离线打包,解决Cannot access central in offline mode?
  • 大客户营销数字销售实战讲师培训讲师唐兴通专家人工智能大模型销售客户开发AI大数据挑战式销售顾问式销售专业销售向高层销售业绩增长创新
  • java项目之校园周边美食探索及分享平台(springboot)
  • 若依项目搭建
  • 计算机网络易混淆知识点串记
  • 【JAVA基础】HashMap详细
  • Node.js NPM以及REPL(交互式解释器) 使用介绍(基础介绍 二)
  • 编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用
  • “高效开发之路:用Spring MVC构建健壮的企业级应用”
  • springboot系列十三: 异常处理
  • Redis数据库测试和缓存穿透、雪崩、击穿
  • 应急救援无人车:用科技守护安全!
  • Webserver(4.4)多进程/多线程实现并发服务器
  • JMeter快速造数之数据导入导出
  • [CKS] K8S Admission Set Up
  • 群控系统服务端开发模式-应用开发-本地上传工厂及阿里云上传工厂开发
  • wps 运行宏 获取所有的表格
  • Flutter鸿蒙next 中的 setState 使用场景与最佳实践
  • 【Ag-Grid】 使用笔记 Vue3 + Vite(一)
  • Docker安装及简单使用
  • Vue3安装、创建到使用
  • vue:Transition
  • 剑指offer第六天
  • vue3+ant design vue与vue3+vant实现阿里云oss文件上传