为什么不用mysql做全文搜索

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 为什么不用mysql做全文搜索

一、为什么要用全文搜索引擎,而不用mysql做全文搜索呢?

1、前言

        ①、有人可能会问,为什么一定要用搜索引擎呢?我们的所有数据不是都可以放在数据库里吗?

         ②、确实,我们大部分的查询功能都可以通过数据库查询获得,如果查询效率低下,还可以通过新建数据库索引,优化SQL等的方式进行提升效率,甚至通过引入缓存比如redis,memcache来加快数据的返回速度。如果数据量更大,还可以通过分库分表来分担查询压力。

         ③、那为什么还要全文搜索引擎呢?我从几个角度来说

A、数据类型

        全文索引搜索很好的支持非结构化数据的搜索,可以更好地快速搜索大量存在的任何单词非结构化文本。例如:Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用 日志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是很好的支持。

B、搜索性能

          如果使用mysql做索引,比如player表,这个表有user_name这个字段,我们要查找出user_name以james开头的球员,和含有james的球员,我们一般怎么做?数据量达到千万级别的时候怎么办?

用sql:   select  *  from   player  where user_name like 'james%' --走索引的

select * from player where user_name like  '%james%';  --不走索引的

C、灵活的搜索

           如果我们想要查出名字叫james的球员,但是用户输入了jame,我们想要提示他一些关键字。

         如果我们想查出带有"冠军”关键字的文章,但是用户输入了"总冠军“,我们也希望你能查出来。

上面的只是列举出了两个能力,还有很多,非常的灵活

D、索引的维护

            一般传统数据库,全文搜索都实现的很鸡肋,因为一般也没人用数据库存长文本你字段,因为进行全文搜索的时候需要扫描整个表,如果数据量大的话即使对SQL的语法进行优化,也是效果甚微,即使建立了索引,但是维护起来也很麻烦,对于insert和update操作都会重新构建索引(底层的数据结构要做一个平衡,比如一些树的平衡)。只有索引保持平衡的时候,搜索的时候性能才是最高的。

E、适合全文搜索引擎的场景

     搜索的数据对象是大量的非结构化的文本数据

     文本数据量达到数十万或者百万级别,甚至更多

     支持大量基于交互式文本的查询

     需求非常灵活的全文搜索查询

     对安全事务,非文本数据操作的需求相对较少的情况。(读多写少的情况)

二、常见的搜索引擎

简介:常见的搜索引擎,Luence,Solr,Elasticsearch

1、Luence

         ①、Luence是一个java全文搜索引擎,完全由Java编写,Luence不是一个完整的应用

而是一个代码库和API,可以很容易地向应用程序添加搜索功能。

         ②、通过简单的API提供强大的功能

             可扩展的高效能索引

             强大,准确,高效的搜索算法

             跨平台太解决方案

2、Apache软件基金会

           ①、在Apache软件基金会提供的开源软件项目的Apache社区支持

           ②、但是Luence只是一个框架,要充分利用它的功能,需要使用java,并且在程序中集成了Luence。需要很多的学习和了解,才能明白它是如何运行的,熟练运用Luence确实非常复杂。

3、Solr

       ①、Solr是一个基于Luence的java库构建的开源搜索平台,它以用户友好的方式提供Apache luence的搜索功能。它是一个成熟的产品,拥有强大而广泛的用户社。它能够提供分布式索引,复制,负载均衡查询以及自动故障转移和恢复。如果它被正确部署然后管理的好,它就能够成为一个高度可靠,可扩展且容错的搜索引擎。很多互联网巨头,如Netflix, eBay,Instagram和亚马逊都使用Solr,因为它能够索引和搜索多个站点。

强大的功能

           ①、全文搜索,②、突出, ③、分面搜索, ④、实时索引,⑤、动态群集,⑥、数据库集成,⑦、NoSql功能和丰富的文档处理

4、Elasticsearch

     ①、Elasticsearch是一个开源的,是一个基于Apache Luence库构建的Restful搜索引擎

     ②、Elasticsearch是在Solr之后几年推出的,它提供了一个分布式,多租用户能力的全文搜索引擎,具有HTTP  Web界面(REST)和无架构JSON文档,Elasticsearch的官方客户端提供java,Groovy,php,Ruby,Perl,Python,.Net和javaScript

    ③、主要功能:  分布式搜索,数据分析,分组和聚合

    ④、应用场景:维基百科,Stack Overflow ,GitHub,电商网站,日志数据分析,商品价格监控网站,BI系统,站内搜索,篮球论坛。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
30天前
|
自然语言处理 关系型数据库 MySQL
mysql 全文搜索功能优缺点
mysql 全文搜索功能优缺点
|
JSON 关系型数据库 MySQL
MySQL全文搜索与JSON支持:高效检索与灵活数据处理
本文深入探讨了MySQL数据库中的全文搜索与JSON支持,通过详细的代码示例,阐述了全文搜索的原理、全文索引的创建,以及JSON数据类型的使用与操作。全文搜索在数据库中的重要性日益凸显,MySQL提供了全文索引来实现高效的文本数据检索,通过MATCH AGAINST语句,可以轻松地进行全文搜索操作。此外,MySQL的JSON支持为半结构化数据的存储和查询提供了灵活的解决方案,您可以存储JSON对象、数组等数据,并使用JSON函数来查询和修改数据。
828 0
|
SQL 自然语言处理 搜索推荐
mysql全文搜索
mysql全文搜索
92 2
|
存储 自然语言处理 关系型数据库
MySQL5.6如何实现全文搜索?具体步骤是怎样的?底层原理是什么?
MySQL5.6如何实现全文搜索?具体步骤是怎样的?底层原理是什么?
219 0
|
算法 关系型数据库 MySQL
|
10天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
12天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
131 11
|
1月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
1月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
7天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
48 13
MySQL的安装&数据库的简单操作