一、业务场景

场景1:当数据库表的数据达到一定量的时候,增加索引也不能带来很高的性能优化,但是很多时候又需要各种条件组合查询。

场景2:数据库表进行分表之后,想要将分散到各表的数据聚合在一起,对用户提供查询和搜索服务。

二、解决办法

解决大数据量的搜索问题,可以引进全文搜索引擎。它的核心技术在于全文检索技术。

全文搜索引擎:在海量的数据中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。

全文检索技术:以各类数据如文本、声音、图像等为对象,提供按数据的内容而不是外在特征来进行的信息检索,其特点是能对海量的数据进行有效管理和快速检索。

三、全文搜索引擎

(一)、常用的全文搜索引擎技术

1、Lucene

Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文搜索引擎,而是一个全文搜索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种语言),是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。

Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。

官网:Apache Lucene - Welcome to Apache Lucene

2、Sphinx

Sphinx是一款基于SQL的高性能全文检索引擎,Sphinx的性能在众多全文检索引擎中也是数一数二的,利用Sphinx,我们可以完成比数据库本身更专业的搜索功能,而且可以有很多针对性的性能优化。

官网:概述 — Sphinx 2.2.0 文档

中文站:Sphinx 中文站

3、Xunsearch(迅搜)

Xunsearch 是一个高性能、全功能的全文检索解决方案。

开源免费、高性能、多功能,简单易用的专业全文检索技术方案。

官网:迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索

4、Splunk

Splunk 是机器数据的引擎。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备生成的快速移动型计算机数据 。 使用 Splunking 处理计算机数据,可让您在几分钟内解决问题和调查安全事件。监视您的端对端基础结构,避免服务性能降低或中断。

官网:Splunk | Turn Data Into Doing

5、Solr

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。

Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

官网:Welcome to Apache Solr - Apache Solr

5、Elasticsearch

Elasticsearch 是一个基于Lucene,分布式、RESTful 风格的搜索和数据分析引擎。

Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎

官网:Free and Open Search: The Creators of Elasticsearch, ELK & Kibana | Elastic

根据DB-Engines的搜索引擎的排名显示,如下:

 Elasticsearch是最受欢迎的企业搜索引擎,其次是Splunk,然后是Solr。

        今天我们只要讲的是Elasticsearch。

四、Elasticsearch

(一)概念

Elasticsearch是一个基于Lucene的分布式、高扩展、高实时的搜索与数据分析引擎。

基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

----- 来自百度百科

学习一门技术,最佳的学习文档就是官网,这里就不写了 。

移步至官网学习:What is Elasticsearch? | Elasticsearch Guide [7.15] | Elastic

(二)关键技术点

1、倒排索引

一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

正向索引:文档 to 单词;

倒排索引:单词 to 文档;

Lucene 为什么不用 b+ 树来搜索数据?Mysql 为什么不用 倒排索引来检索数据?
        b+树主要设计目的是减少搜索时访问磁盘的次数,而Lucene等搜索引擎设计的时候,追求的目标是倒排压缩率&倒排解压速度&倒排Bool运算速度。取倒排到内存运算的时候,是连续读取,时间开销和倒排的大小有关系,所以并不适合用b+数。
        同理Mysql等数据库使用索引的目的是快速定位某一行数据,若使用倒排这种线性化的数据结构存储数据,其查找的时候访问磁盘的次数会远大于使用b+的数据库。

2、分词器(analyzer)        

(三)安装和使用

1、安装和运行

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.1-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.15.1-linux-x86_64.tar.gz
cd elasticsearch-7.15.1
./bin/elasticsearch

2、访问:

curl http://127.0.0.1:9200{"name" : "QtI5dUu","cluster_name" : "elasticsearch","cluster_uuid" : "v8OWkR1OQO-rgV8o_lRhEA","version" : {"number" : "7.15.1","build_flavor" : "default","build_type" : "tar","build_hash" : "f4d76bd413ecfbd5122c3aa5dc85465960f18afe","build_date" : "2021-04-23T15:58:28.336786977Z","build_snapshot" : false,"lucene_version" : "8.8.2","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}

3、用思维导图整理了一些知识点和语法

性能优化--全文搜索引擎(Elasticsearch)相关推荐

  1. 全文搜索引擎----ElasticSearch和Solr

    全文搜索引擎 ElasticSearch 还是 Solr? 最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量 ...

  2. 全文搜索引擎Elasticsearch,这篇文章给讲透了!(Elasticsearch技术原理及实现方式)

    关于Elasticsearch的技术原理及实现方式看了两篇讲的非常好的文章,在这里分享给大家. 其中一篇是: Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文 ...

  3. 全文搜索引擎 Elasticsearch 入门概念

    基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...

  4. 全文搜索引擎Elasticsearch,这篇文章给讲透了

    之前已经分享过Elasticsearch的使用和原理的知识,由于近期在公司内部做了一次分享,所以本篇主要是基于之前的博文的一个总结,希望通过这篇文章能让读者大致了解Elasticsearch是做什么的 ...

  5. 全文搜索引擎 ElasticSearch 还是 Solr?

    原文链接 最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步,而且是其他团队在维护,依赖性太强,导致 So ...

  6. 2万字详解,彻底讲透 全文搜索引擎 Elasticsearch

    来源:cnblogs.com/jajian/p/11223992.html 由于近期在公司内部做了一次 Elasticsearch 的分享,所以本篇主要是做一个总结,希望通过这篇文章能让读者大致了解 ...

  7. 全文搜索引擎ElasticSearch

    什么是ElasticSearch? Elasticsearch和Redis, Mysql一样,不仅服务于Java语言,其它语言也可以使用, 它的功能也类似一个数据库,能高效的从大量数据中搜索匹配指定关 ...

  8. 全文搜索引擎Elasticsearch,这篇文章给讲透了!

    于elasticsearch的深度好文. 生活中的数据 搜索引擎是对数据的检索,所以我们先从生活中的数据说起.我们生活中的数据总体分为两种: 结构化数据 非结构化数据 结构化数据:也称作行数据,是由二 ...

  9. 彻底讲透 全文搜索引擎 Elasticsearch

    生活中的数据 搜索引擎是对数据的检索,所以我们先从生活中的数据说起.我们生活中的数据总体分为两种: 结构化数据 非结构化数据 结构化数据: 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵 ...

最新文章

  1. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
  2. ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能)
  3. javascript获取系统时间时区_详解Linux操作系统修改时间和修改时区的方法
  4. python精确运算_Python:执行精确的浮点数运算
  5. aria-label及aria-labelledby应用//////////[信息无障碍产品联盟]
  6. “看看人家苹果和亚马逊”,嫌薪酬太低,谷歌员工“炮轰”高管
  7. 给实践者的算法学习指南
  8. html5使用mescroll
  9. 年度开源盛会 ApacheCon 首发中文盛宴来临,欢迎报名!
  10. C++ control reaches end of non-void function [-Werror=return-type]
  11. PHP - 垃圾回收机制收集
  12. 学计算机要具备什么能力,具备什么特质能学计算机
  13. bcdedit添加linux引导,强大的BCDEdit工具-启动项等相关问题-设置默认开机启动项
  14. 瓦片地图面面观之缩放级别
  15. windows系统电脑间互传文件
  16. 机器学习的所有资源链接和经验教训(五)ML技术讲座
  17. 迭代器(lterator)
  18. 产品3C认证在哪里办理
  19. golang实现手机号验证码登入
  20. 台州银行信息科技部笔试与面试经验总结

热门文章

  1. 华为正式发布鸿蒙多少钱,正式发布!鸿蒙,来了!
  2. 日常工作必备 记录一下
  3. 什么是 vue-cli?怎样创建vue-cli项目?
  4. 14.HTML和CSS 01
  5. python爬取网页的视频
  6. 微信公众号接入(参考微信开放文档记笔记)
  7. [Linux]RHCSA和RHCE笔记+练习题
  8. 字符流和字节流的区别
  9. js -- 计算机这样高产“优雅的”诗 特效
  10. linux 解压rar