Elasticsearch官网:欢迎来到 Elastic — Elasticsearch 和 Kibana 的开发者 | Elastic
注意:Elasticsearch官网访问和加载的耗时很长!!!
目录
一、Elasticsearch入门
1. Elasticsearch介绍
【摘自百度百科】
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。
Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。
Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性。它支持facetting和percolating,如果新文档与注册查询匹配,这对于通知非常有用。另一个特性称为“网关”,处理索引的长期持久性;例如,在服务器崩溃的情况下,可以从网关恢复索引。Elasticsearch支持实时GET请求,适合作为NoSQL数据存储,但缺少分布式事务。
2. Lucene介绍
【摘自百度百科】
Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。
3. 什么是Elasticsearch
一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能,帮助我们从海量数据中快速找到需要的内容。
4. 什么是elastic stack(ELK)?
是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch
被广泛应用在日志数据分析、实时监控等领域。
5. 什么是Lucene?
Lucene是Apache的开源搜索引擎类库,提供了搜索引擎的核心API
Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。
6. 面试题
关于“谈谈你对 ES 的理解”
Elasticsearch ,简称 ES 。它是建立在全文搜索引擎库 Apache Lucene 基础之上的一个开源的搜索引擎,也可以作为 NoSQL 数据库,存储任意格式的文档和数据。也可以做大数据的分析,是一个跨界开源产品。它最主要的应用场景是 ELK 的日志分析系统。另外它还有以下特点:1. 第一、采用 Master-slave 架构,实现数据的分片和备份2. 第二、使用 Java 编写,并对 Lucene 进行封装,隐藏了 Lucene 的复杂性3. 第三、能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据4. 第四、ES 提供的 Restful API,不仅简化了 ES 的操作,还支持任何语言的客户端提供 API 接口,另外 Restful API 的风格还实现了 CURD 操作、创建索引,删除索引等功能。
二、正向索引和倒排索引
1. 什么是正向索引
正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
正向索引是以关键字为主码,查询时需要遍历每一个文件。每个文件都对应一个文件ID,文件内容被表示为一串关键词的集合。实际上在搜索引擎索引库中,关键词也已经转换为关键词ID。
举例:传统数据库(如MySQL)采用正向索引
如果是根据id查询,那么直接走索引,查询速度非常快。
2. 倒排索引
2.1 什么是倒排索引
【摘自百度百科】
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)
2.2 倒排索引相关概念
文档(
Document):用来搜索的数据,其中的每一条数据就是一个文档。词条(
Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语
2.3 如何创建倒排索引
创建倒排索引是对正向索引的一种特殊处理,
将每一个文档的数据利用算法分词,得到一个个词条
创建表,每行数据包括词条、词条所在文档id、位置等信息
因为词条唯一性,可以给词条创建索引,例如hash表结构索引
2.4 倒排索引的搜索流程
倒排索引的搜索流程如下(以搜索"华为手机"为例):
- 用户输入条件
"华为手机"进行搜索。- 对用户输入内容分词,得到词条:
华为、手机。- 拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。
- 拿着文档id到正向索引中查找具体文档
3. 正向索引和倒排索引
正向索引:
优点:
可以给多个字段创建索引
根据索引字段搜索、排序速度非常快
缺点:
根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描
倒排索引:
优点:
根据词条搜索、模糊搜索时,速度非常快
缺点:
只能给词条创建索引,而不是字段
无法根据字段做排序
三、Elasticsearch基本概念
1.什么是文档(Document)
一条数据就是一个文档,在Elasticsearch中是按照Json格式存放
2. 什么是字段(Field)
Json文档中的字段
3. 什么是索引(Index)
通类型文档的集合
4. 什么是映射(mapping)
索引中文档的约束,比如:字段名称、类型
5. Elasticsearch和MySQL的对比
| MySQL | Elasticsearch | 说明 |
|---|---|---|
| Table | Index | 索引(index),就是文档的集合,类似数据库的表(table) |
| Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |
| Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
| Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |
| SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作ela |

本文详细介绍了Elasticsearch和Lucene的关系,以及Elasticsearch的基础概念,如文档、字段、索引和映射。重点讨论了倒排索引的原理、创建过程和搜索流程,同时提到了正向索引的对比。此外,还涵盖了Elasticsearch的安装、索引库操作和文档操作的基本语法与实例。




最低0.47元/天 解锁文章
10万+

被折叠的 条评论
为什么被折叠?



