跳到主要内容

Elasticsearch (ES)

介绍

Elasticsearch(简称ES)是一个基于Apache Lucene构建的开源搜索引擎。它提供了一个分布式、多租户的全文搜索引擎,支持HTTP web接口和无模式JSON文档。Elasticsearch广泛应用于日志分析、全文搜索、安全智能、业务分析等多种场景

主要特点

  • 分布式和可伸缩性:Elasticsearch可以轻松扩展,从单个服务器扩展到数十、数百甚至数千个服务器,可以处理PB级数据。
  • 实时搜索:Elasticsearch的搜索几乎是实时的,通常在文档索引后的一秒内即可搜索到。
  • 多种语言支持:支持多种语言文本的搜索,包括但不限于英语、中文等。
  • 复杂查询支持:支持结构化和非结构化查询,包括全文搜索、模糊搜索、范围搜索等。
  • 高可用性:Elasticsearch可以在节点失败时继续工作,确保服务不中断。

核心概念

  • 节点(Node):单个Elasticsearch实例。
  • 集群(Cluster):由多个节点组成,共同存储数据并在所有节点上提供联合索引和搜索功能。
  • 索引(Index):用于存储相关数据的集合。
  • 类型(Type):索引可以定义一个或多个类型,它是索引中的一个逻辑分类/分区。
  • 文档(Document):存储在索引中的基本信息单元,通常以JSON格式表示。
  • 分片(Shard):索引可以被分割成多个分片,每个分片是索引的一个子集。
  • 副本(Replica):每个分片的一份或多份复制。

使用场景

  • 全文搜索引擎:提供网站或应用程序的文本搜索功能。
  • 日志和事务数据分析:作为日志收集、监控和分析的工具(如ELK栈中的E)。
  • 商业智能分析:用于存储和分析大量数据,以支持业务决策。
  • 安全情报分析:用于网络安全和欺诈检测。

操作和查询

Elasticsearch支持通过RESTful API进行操作,包括索引创建、数据CRUD(创建、读取、更新、删除)、搜索等。查询可以是简单的文本查询,也可以是复杂的查询,包括布尔查询、范围查询、聚合查询等。

插曲

在2024年初,接到一个要做一个文档大搜的功能,在做该功能的时候,起初使用了很多轻量微服务,例如lunr等。但是因为这些用nodejs写的搜索库实在功能太过于垃圾,为什么这么说,首先是所以不支持动态扩充,接着没有强大的插件系统,来支持中文分词和搜索,导致需求完全没法满足。在经过复杂的心里斗争后还是选择了ES,本以为会很麻烦,但是公司这块封装的很完善,用起来很爽,并且部署了三个节点,效果很棒。