热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么不用mysql做全文搜索

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

一、为什么要用全文搜索引擎,而不用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系统,站内搜索,篮球论坛。



推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • C# 中 SQLite 报错:在 "\\s\\" 附近出现语法错误,如何解决? ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
author-avatar
我才不要喜欢你了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有