Featured image of post Elasticsearch记录

Elasticsearch记录

ES分布式搜索引擎

什么是elasticsearch?

  • 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能

什么是elastic stack(ELK)?

  • 是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch

什么是Lucene?

  • 是Apache的开源搜索引擎类库,提供了搜索引擎的核心API

ES核心特性

  1. 分布式架构
    • 数据自动分片(Sharding)和复制(Replication),支持水平扩展。
    • 高可用性,即使部分节点故障,系统仍能正常运行。
  2. 实时搜索
    • 数据几乎可以实时被搜索和分析。
    • 支持复杂的查询和聚合操作。
  3. 全文搜索
    • 基于 Lucene 的全文搜索引擎,支持多语言分词、模糊搜索、短语搜索等。
  4. 多数据类型支持
    • 支持结构化、非结构化和半结构化数据。
    • 支持 JSON 文档存储。
  5. 强大的查询语言
    • 提供丰富的查询 DSL(Domain Specific Language),支持复杂查询和过滤。
  6. 聚合分析
    • 支持对数据进行统计、分析和可视化(如平均值、求和、分组等)。
  7. RESTful API
    • 通过 HTTP 接口进行操作,易于集成和使用。
  8. 与 ELK Stack 集成
    • 通常与 Logstash(数据收集和处理)和 Kibana(数据可视化)一起使用,构成 ELK Stack

ES核心概念

  1. Index(索引)
    • 类似于数据库中的表,用于存储具有相似结构的文档。
    • 例如,user 索引可以存储用户相关的文档。
  2. Document(文档)
    • 索引中的基本数据单元,以 JSON 格式存储。
    • 例如,一个用户文档可能包含 idnameage 等字段。
  3. Type(类型)
    • 在 Elasticsearch 7.x 之前,索引可以包含多个类型(类似于表的分区)。
    • 从 Elasticsearch 7.x 开始,类型被弃用,每个索引只能包含一个类型(_doc)。
  4. Shard(分片)
    • 索引被分成多个分片,分布在不同的节点上,以实现水平扩展。
    • 分为主分片(Primary Shard)和副本分片(Replica Shard)。
  5. Node(节点)
    • Elasticsearch 集群中的一个实例,负责存储数据和执行操作。
  6. Cluster(集群)
    • 由一个或多个节点组成,共同存储和操作数据。
  7. Mapping(映射)
    • 定义索引中文档的字段类型和属性(如字符串、数值、日期等)。
  8. Query DSL(查询语言)
    • 用于定义搜索和过滤条件的 JSON 格式语言。

基本操作示例

1. 创建索引
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
PUT /user
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "age": { "type": "integer" },
      "email": { "type": "keyword" }
    }
  }
}
2. 添加文档
1
2
3
4
5
6
POST /user/_doc/1
{
  "name": "John Doe",
  "age": 30,
  "email": "john@example.com"
}
3. 搜索文档
1
2
3
4
5
6
7
8
GET /user/_search
{
  "query": {
    "match": {
      "name": "John"
    }
  }
}
4. 聚合分析
1
2
3
4
5
6
7
8
GET /user/_search
{
  "aggs": {
    "avg_age": {
      "avg": { "field": "age" }
    }
  }
}
使用 Hugo 构建
主题 StackJimmy 设计