简介
Elasticsearch 是Elastic Stack核心的分布式搜索和分析引擎。Logstash 和 Beats有助于收集、聚合和丰富您的数据并将其存储在Elasticsearch中。使用Kibana,您可以交互式地探索、可视化和共享数据的见解、并且管理和监视系统。Elasticsearch是建立索引、搜索和分析的工具。
Elasticsearch 为所有类型的数据提供实时搜索和分析。无论是结构化文本数据还是非结构化数据或是地理位置数据,Elasticsearch都能以支持快速搜索的方式有效的对其进行存储和索引。你不仅可以进行简单的数据索引,还可以汇总信息来发现数据中的趋势和模式。随着数据和查询量的增长,Elasticsearch的分布式特性使您的部署可以无缝隙增长。
虽然并非每个问题都是搜索问题,但是Elasticsearch可以提供足够的速度和灵活性来处理各种用例中的数据:
- 将搜索添加到应用或网站
- 存储和分析日志、指标、安全事件数据
- 使用机器学习自动实时建模数据行为
- 使用Elasticsearch作为存储引擎来自动化业务工作流程
- 使用Elasticsearch 作为地理信息系统管理,集成和分析空间信息
- 使用Elasticsearch 作为生物信息学研究工具来存储和处理遗传数据
人们使用搜索的新颖方式使我们感到惊讶。但是,无论您的用例与其中之一相似,还是您正在使用Elasticsearch 解决新的问题,在Elasticsearch 中处理数据、文档、索引的方式都是相同的
基本概念
Elasticsearch 是面向文档的,核心概念和关系型数据库的类比;在Elasticsearch中,先前的版本会有type的概念,类似于mysql中的表,但已经被逐渐弃用。**可以在实践中,慢慢体会这些基本概念。**这里所描述的不过是笔者,自己目前的体会而已。
mysql | Elasticsearch | 示例(可以查看第二章的示例数据) |
---|---|---|
database | indice(索引) | bank |
rows | document | account1 |
columns | key | state |
数据存储到Elasticsearch :文档和索引
Elasticsearch 是一个分布式文档存储系统。 Elasticsearch 不会将信息存储为列数据的行,而是存储为已序列化为JSON文档的负载数据结构。当集群中有多个Elasticsearch 节点时,存储的文档会分布到整个集群中,并且从任何节点都可以访问。
存储特性
存储文档时,Elasticsearch 几乎实时的对其进行索引和完全搜索。Elasticsearch 使用成为倒排索引的数据结构,该结构支持非常快速的全文本搜索。反向索引列出了出现任何文档中的每个唯一单词,并标示量 每个单词出现的所有文档。
索引特性
索引可以认为是文档的优化集合,每个文档都是字段的集合,这些字段是包含数据的键值对。默认情况下,Elasticsearch 对每个字段中的所有数据建立索引,并且每个索引字段都具有专门的优化数据结构。例如:文本字段存储在倒排索引中、数字字段和地理字段存储在BKD树(Bkd树是一种动态索引数据结构,能高效且可伸缩地索引大的多维点数据集。它有 (1) 极高的空间利用率和 (2) 优秀的查询、(3) 更新性能——且这三种属性在高强度更新下依旧成立。)中。由于按字段数据结构进行组合,并返回搜索结果的能力,使得Elasticsearch才能如此之快。
schema-less
其他特性
Elasticsearch 还具有无模式(schema-less)能力,这意味着可以为文档创建索引,而无需明确指定如歌处理文档中可能出现的每个不同的字段。启动动态映射后,Elasticsearch 自动检测并将新字段添加到索引。这个默认行为使索引和浏览数据变得很容易,只需开始建立索引文档,Elasticsearch 就会检测数据所对应的类型(意思是说,不需要明确指定每个字段确定的数据类型,Elasticsearch 有能力主动识别存储的数据类型)将其映射到Elasticsearch 数据类型中。
定义自己的映射
- 区分全文字符串字段和精确字符串字段
- 执行特定语言的文本分析
- 优化字段以进行部分匹配
- 使用自定义日期格式
- 使用无法自动检测到的数据类型。如:geo_point、geo_shape(地理位置)
总结
为不同的目的,利用不同的方式对同一字段建立索引非常有用。例如,您可能希望将一个字符串字段索引为全文搜索的文本字段,以及作为排序或汇总数据的关键字字段。或者,使用多个语言分析器来处理包含用户输入的字符串字段的内容。
在搜索时,也会使用在索引期间应用于全文字段的分析链。当您查询全文字段时,对查询文本进行相同的分析,然后再在索引中查找术语。
搜索和分析
虽然您可以将Elasticsearch 用作文档存储并检索文档及其元数据,但真正强大之处在于能够轻松访问基于Apache Lucene所搜引擎库构建的全套搜索功能。Elasticsearch 提供了一个简单的REST API,用于管理您的集群以及索引和搜索功能。
搜索数据
- Elasticsearch REST API支持结构化查询,全文查询以及结合两者的复杂查询。结构化查询类似于您可以在SQL中构造的查询类型。全文查询会找到所有与查询字符串匹配的文档,并按相关性(搜索关键字和文档的匹配程度)对它们进行返回。
- 除了搜索单个术语外,还可以执行短语搜索,相似性搜索和前缀搜索,并获得自动完成建议。
- 还支持高性能地理和数字查询的优化数据结构中索引非文本数据。
- DSL查询语言:JSON样式的查询语言,可以访问所有的搜索功能
分析数据
- 聚合,是您能够构建数据的复杂摘要,并深入了解数据的关键指标、模式、趋势。由于聚合利用了用于搜索的相同数据结构,因此聚合操作也非常快。这使得您可以实时分析和可视化数据。
- 聚合与搜索请求一起运行,您可以在单个请求中同时对相同数据搜索文档、过滤结果、执行分析。