性能优化--全文搜索引擎(Elasticsearch)

一、业务场景

        场景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)_第1张图片

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

        今天我们只要讲的是Elasticsearch。

四、Elasticsearch

         (一)概念

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

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

----- 来自百度百科

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

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

        (二)关键技术点

        1、倒排索引

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

        正向索引:文档 to 单词; 

        倒排索引:单词 to 文档;

性能优化--全文搜索引擎(Elasticsearch)_第2张图片

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

         2、分词器(analyzer)        性能优化--全文搜索引擎(Elasticsearch)_第3张图片

        (三)安装和使用

        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)_第4张图片

你可能感兴趣的:(性能优化,elasticsearch,搜索引擎,性能优化,全文检索,分布式)