目录
未完待续......
一、ElasticSearch简介
1.ElasticSearch官网:
Free and Open Search: The Creators of Elasticsearch, ELK & Kibana | Elastichttps://www.elastic.co/
2.ElasticSearch是做什么的?
ElasticSearch是一个基于Lucene的搜索服务器 ,实现全文检索。
3. Lucene 是什么?
Lucene 是 apache 下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene 的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。
4.什么是全文检索?
简言之,全文检索就是将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索。
想要明白什么是全文检索,需要明白一个概念:什么是非结构化数据?和非结构化数据查询方法?
4.1 数据分类
我们生活中的数据总体分为两种:结构化数据和非结构化数据。
-
结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
-
非结构化数据:指不定长或无固定格式的数据,如邮件,word 文档等磁盘上的文件
4.2 非结构化数据查询方法
-
顺序扫描法(Serial Scanning) 所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用 windows 的搜索也可以搜索文件内容,只是相当慢。
-
全文检索(Full-text Search) :将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。 例如:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有拼音表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某 些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,分别只有几种 可以一一列举,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。 我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到我们的非结构化数据—— 也即对字的解释。 这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search) 。 虽然创建索引的过程也是非常耗时的,但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。
5.使用场景
对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,比如百度、Google 等搜索引擎、视频网站内搜索、电商网站站内搜索等。
比如使用关系型数据库MySQL,一张表数据量达到千万级别,这个时候要进行like查询,数据基本查不动。
6. ElasticSearch核心概念
索引(index):
ElasticSearch存储数据的地方,可以理解成关系型数据库中的数据库概念。
映射(mapping):
mapping定义了每个字段的类型、字段所使用的分词器等。相当于关系型数据库中的表结构。
文档(document):
Elasticsearch中的最小数据单元,常以json格式显示。一个document相当于关系型数据库中的一行数据。
倒排索引:
将各个文档中的内容,进行分词,形成词条。然后记录词条和数据的唯一标识(id)的对应关系,形成的产物。
一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,对应一个包含它的文档id列表。
ES将写入索引的所有信息组织为倒排索引( inverted index)的结构形式。倒排索引是一种将词条映射到文档的数据结构,它与传统的关系数据库的工作方式不同。你可以认为倒排索引是面向词条的而不是面向文档的。
类型(type):
一种type就像一类表。如用户表、角色表等。在Elasticsearch7.X默认type为_doc
注: \- ES 5.x中一个index可以有多种type。
\- ES 6.x中一个index只能有一种type。
\- ES 7.x以后,将逐步移除type这个概念,现在的操作已经不再使用,默认_doc
7.索引和搜索流程
二、ElasticSearch的使用
1.windows中运行
bin目录中双击运行elasticsearch.bat
即可启动
注:如果启动出现闪退,在 config目录中修改 elasticsearch.yml ,在最后添加一行配置:
xpack.ml.enabled: false
拓展:
Elastic官网:开源搜索:Elasticsearch、ELK Stack 和 Kibana 的开发者 | Elastic
Elasticsearch官网:Elasticsearch:官方分布式搜索和分析引擎 | Elastic
Elastic有一条完整的产品线:Elasticsearch、Kibana、Logstash等,这三个产品就是大家常说的ELK技术栈。
ELK常用框架:
2.检查是否运行成功
访问http://localhost:9200/ 可以看到节点信息。
3.关于Head插件
下载地址:GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster
可再Chrome浏览器操作、查看数据库。
4.安装ik分词器
ik分词器可以分割中文语句。
下载地址:Releases · medcl/elasticsearch-analysis-ik · GitHub
注意:需要下载与ES对应的版本
在elasticsearch-x.x.x\plugins
中新建ik
文件夹,复制elasticsearch-analysis-ik-x.x.x.zip
到ik
文件夹中,然后解压,注意,不要复制或解压到ik目录外,将解压出的·elasticsearch目录下的所有文件剪切到ik目录中,重新启动ES,可以看到分词插件被加载了:
强调: es插件目录中一个目录就是一个插件
在Head中测试如下命令:
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
5.Kibana
简介:Kibana是es的可视化工具
下载地址:Install Kibana | Kibana Guide [7.15] | Elastic
注意:版本需要和es保持一致
启动:双击运行bin目录中的kibana.bat
即可启动
测试:打开浏览器: http://localhost:5601/
在kibana左侧做到Dev Tools,输入请求命令
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
测试结果如下:
6. es的增删改查操作
Elasticsearch提供了Rest风格的API,即Http请求接口,而且也提供了各种语言的客户端API
文档地址:Quick start | Elasticsearch Guide [7.15] | Elastic
中文文档:Elasticsearch: 权威指南 | Elastic
6.1 操作索引库
基本概念:
Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。
对比关系:
未完待续.......