首页
学习
活动
专区
圈层
工具
发布

ElasticSearch(7.2.2)-为什么不⽤mysql做全⽂搜索

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42528266/article/details/102785018

简介:为什么要⽤全⽂搜索引擎,⽽不⽤mysql做全⽂搜索呢

  • 前⾔
代码语言:txt
复制
- 有⼈可能会问,为什么⼀定要⽤搜索引擎呢?我们的所有数据不是都可以放在数据库⾥吗?
- ⽽且 Mysql,Oracle,SQL Server 等数据库⾥不是也能提供查询搜索功能,直接通过数据库查询不就可以了吗?
- 确实,我们⼤部分的查询功能都可以通过数据库查询获得,如果查询效率低下,还可以通过新建数据库索引,优化SQL等⽅式进⾏提升效率,甚⾄通过引⼊缓存⽐如redis,memcache来加快数据的返回速度。如果数据量更⼤,还可以通过分库分表来分担查询压⼒。
- 那为什么还要全⽂搜索引擎呢?我们从⼏个⻆度来说
代码语言:txt
复制
- 全⽂索引搜索很好的⽀持⾮结构化数据的搜索,可以更好地快速搜索⼤量存在的任何单词⾮结构化⽂本。例如 Google,百度类的⽹站搜索,它们都是根据⽹⻚中的关键字⽣成索引,我们在搜索的时候输⼊关键字,它们会将该关键字即索引匹配到的所有⽹⻚返回;还有常⻅的项⽬中应⽤⽇志的搜索等等。对于这些⾮结构化的数据⽂本,关系型数据库搜索不是能很好的⽀持。
代码语言:txt
复制
- 如果使⽤mysql做搜索,⽐如有个player表,这个表有user\_name这个字段,我们要查找出user\_name以james开头的球员,和含有James的球员。我们⼀般怎么做?数据量达到千万级别的时候怎么办?
代码语言:javascript
复制
select * from player where user_name like 'james%';
  • 灵活的搜索
    • 如果我们想查出名字叫james的球员,但是⽤户输⼊了jame,我们想提示他⼀些关键字
代码语言:txt
复制
- 如果我们想查出带有"冠军"关键字的⽂章,但是⽤户输⼊了"总冠军",我们也希望能查出来。
  • 索引的维护
    • ⼀般传统数据库,全⽂搜索都实现的很鸡肋,因为⼀般也没⼈⽤数据库存⻓⽂本字段,因为进⾏全⽂搜索的时候需要扫描整个表,如果数据量⼤的话即使对SQL的语法进⾏优化,也是效果甚微。即使建⽴了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。
  • 适合全⽂索引引擎的场景
    • 搜索的数据对象是⼤量的⾮结构化的⽂本数据。
    • ⽂本数据量达到数⼗万或数百万级别,甚⾄更多。
    • ⽀持⼤量基于交互式⽂本的查询。
    • 需求⾮常灵活的全⽂搜索查询。
    • 对安全事务,⾮⽂本数据操作的需求相对较少的情况。
下一篇
举报
领券