一、业务场景
场景1:当数据库表的数据达到一定量的时候,增加索引也不能带来很高的性能优化,但是很多时候又需要各种条件组合查询。
场景2:数据库表进行分表之后,想要将分散到各表的数据聚合在一起,对用户提供查询和搜索服务。
二、解决办法
解决大数据量的搜索问题,可以引进全文搜索引擎。它的核心技术在于全文检索技术。
全文搜索引擎:在海量的数据中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。
全文检索技术:以各类数据如文本、声音、图像等为对象,提供按数据的内容而不是外在特征来进行的信息检索,其特点是能对海量的数据进行有效管理和快速检索。
三、全文搜索引擎
(一)、常用的全文搜索引擎技术
1、Lucene
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文搜索引擎,而是一个全文搜索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种语言),是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。
Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。
2、Sphinx
Sphinx是一款基于SQL的高性能全文检索引擎,Sphinx的性能在众多全文检索引擎中也是数一数二的,利用Sphinx,我们可以完成比数据库本身更专业的搜索功能,而且可以有很多针对性的性能优化。
中文站:Sphinx 中文站
3、Xunsearch(迅搜)
Xunsearch 是一个高性能、全功能的全文检索解决方案。
开源免费、高性能、多功能,简单易用的专业全文检索技术方案。
4、Splunk
Splunk 是机器数据的引擎。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备生成的快速移动型计算机数据 。 使用 Splunking 处理计算机数据,可让您在几分钟内解决问题和调查安全事件。监视您的端对端基础结构,避免服务性能降低或中断。
5、Solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。
Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
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、用思维导图整理了一些知识点和语法