Elasticsearch7——什么是Elasticsearch

179 阅读4分钟

[这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战]


一、什么是Elasticsearch

Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,使用JSON存储数据,支持REST风格的请求。Elasticsearch是用Java开发的,并在Apache许可证下作为开源软件发布。

Elasticsearch包含两个基本的流程:

  • 数据输入:文档与索引
  • 信息输出:搜索与分析

二、文档与索引

Elasticsearch中存在文档与索引的概念,用于处理输入的数据。

  • 分布式文档存储引擎
    • 会存储为已序列化为 JSON 文档的复杂数据结构。当集群中有多个 Elasticsearch 节点时,存储的文档分布在整个集群中,并且可以从任何节点立即访问。
  • 使用倒排索引
    • 支持非常快速的全文搜索;倒排索引会列出在任意文档中出现的唯一单词,并标识出现在文档中的每个单词
  • 动态映射(dynamic mapping)
    • Elasticsearch可以根据待索引数据自动建立索引、自动定义映射类型;支持布尔值、浮点和整数值、日期和字符串等类型的自动映射
    • 在不明确如何处理文档中可能出现数据类型时,可以启动动态映射;
  • 支持自定义映射

ES中存在索引概念,表示文档的优化集合;每个文档都是字段集合,包含了数据的键值对。

三、搜索与分析

Elasticsearch构建在 Apache Lucene 搜索引擎库上,可以提供全套搜索功能。Elasticsearch 提供了一个简单一致的 REST API 来管理集群、索引和搜索数据。支持多种语言:

  • Java
  • JavaScript
  • Go
  • .NET
  • PHP
  • Perl
  • Python
  • Ruby

Elasticsearch REST API 支持多种查询方式:

  • 结构化查询:类似于sql查询,支持字段值查询、匹配度查询
  • 全文查询:查找与查询字符串匹配的所有文档,并按相关性排序返回
  • 复杂查询:结合了结构化查询与全文查询

除了搜索单个术语外,还可以执行短语搜索、相似性搜索和前缀搜索。Elasticsearch 支持高效地在地理和数值查询的优化数据结构中索引非文本数据。

Elasticsearch 聚合使开发者能够构建复杂的数据摘要并深入了解关键指标、模式和趋势

四、拓展性与弹性搜索

Elasticsearch 旨在始终可用并支持根据需求进行扩展,可以将服务器(节点)添加到集群以增加容量,Elasticsearch 会自动在所有可用节点之间分配您的数据和查询负载。

Elasticsearch 索引实际上只是一个或多个物理分片的逻辑分组,其中每个分片实际上是一个独立的索引。通过将索引中的文档分布在多个分片中,并将这些分片分布在多个节点上,Elasticsearch 可以确保冗余,这既可以防止硬件故障,又可以在将节点添加到集群时增加查询容量。

ES存在主、副两种分片,索引中的每个文档都归属于一个主分片,而副分片是主分片的副本。

  • 优点
    • 副本提供数据的冗余副本,以防止硬件故障并增加处理读取请求(如搜索或检索文档)的容量。
  • 缺陷
    • 分片越多,维护索引的开销越大;
    • 查询大量小分片会使每个分片的处理速度更快,但更多查询意味着更多开销。
  • 设置分片的方法
    • 分片数量与可用空间成正比,需要按实际数据进行测试

索引中的主分片数量在创建索引时是固定的,但副本分片的数量可以随时更改,而不会中断索引或查询操作。值得一提的是,当集群添加新的节点时,分片会进行动态调整,会按照负载转移到其他节点上。

五、参考资料

What is Elasticsearch?