Elasticsearch入门:简单易懂的基础知识与实战案例

176 阅读5分钟

Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它能快速处理海量数据,支持全文搜索和复杂的数据分析,广泛应用于电商搜索、日志分析、安全监控等场景。下面用最简单的语言介绍其基础知识,并配合实际代码示例,帮助你快速上手。


什么是 Elasticsearch?

  • 核心功能:把数据存成“文档”,通过“索引”快速查找,支持全文搜索和数据统计分析。数据写入后,通常1秒内即可被搜索到,实时性强。
  • 分布式架构:多个服务器(节点)组成集群,数据分成多个“分片”,每个分片有主分片和副本,保证数据安全和查询速度。
  • 数据格式:所有数据以 JSON 格式存储,结构灵活,适合各种数据类型。
  • Elastic Stack:Elasticsearch 通常和 Logstash(数据采集)、Kibana(数据可视化)配合使用,组成完整的数据处理链。

基本概念

名称说明类比关系
集群(Cluster)多台服务器组成的整体系统数据库服务器集群
节点(Node)集群中的一台服务器实例单台数据库服务器
索引(Index)存储一类数据的地方,相当于数据库中的表数据库中的表
文档(Document)索引中的一条数据,JSON格式表中的一行数据
字段(Field)文档中的属性,比如姓名、年龄等表中的列
分片(Shard)索引被拆分成的多个部分,分散存储和查询数据库分区
副本(Replica)分片的备份,提高容错和查询性能数据库的备份

Elasticsearch 典型应用场景

  • 全文搜索:电商商品搜索、网站内容检索,支持多字段搜索和高亮显示。
  • 日志分析与监控:实时收集系统和应用日志,快速定位问题,结合 Kibana 可视化展示。
  • 安全分析:快速搜索海量安全日志,发现异常行为。
  • 推荐系统:分析用户行为,个性化推荐商品或内容。
  • 地理位置搜索:基于位置的搜索,如外卖配送、旅游推荐。

快速入门实战案例

1. 安装与启动

  • 需要安装 Java 8 及以上版本。
  • 下载 Elasticsearch,解压后进入目录,运行:
bash
./bin/elasticsearch
  • 默认监听端口是 9200,浏览器访问 http://localhost:9200,看到类似下面的JSON表示启动成功:
{
  "name": "node-1",
  "cluster_name": "elasticsearch",
  "version": {
    "number": "7.17.0"
  },
  "tagline": "You Know, for Search"
}
  • 如果遇到内存限制,执行:
bash
sudo sysctl -w vm.max_map_count=262144

2. 创建索引(类似数据库建表)

创建一个名为 product_info 的索引,设置5个主分片,1个副本,并定义字段类型(使用中文分词器 IK):

PUT /product_info
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "productName": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "annual_rate": {
        "type": "keyword"
      },
      "describe": {
        "type": "text",
        "analyzer": "ik_smart"
      }
    }
  }
}

注意:7.0及以上版本不再使用type字段,直接定义properties


3. 插入文档(添加数据)

product_info 索引插入一条商品数据:

POST /product_info/_doc
{
  "productName": "智能手机",
  "annual_rate": "5%",
  "describe": "高性能智能手机,支持5G"
}

4. 简单搜索

搜索商品名称中包含“手机”的文档:

bash
GET /product_info/_search
{
  "query": {
    "match": {
      "productName": "手机"
    }
  }
}

5. 高亮显示关键词

搜索描述中包含“5G”,并高亮显示关键词:

GET /product_info/_search
{
  "query": {
    "match": {
      "describe": "5G"
    }
  },
  "highlight": {
    "fields": {
      "describe": {}
    }
  }
}

返回结果中,匹配的“5G”会被高亮标记,方便用户快速定位。


6. 聚合统计示例

统计商品中不同年利率的数量分布:

GET /product_info/_search
{
  "size": 0,
  "aggs": {
    "rate_counts": {
      "terms": {
        "field": "annual_rate.keyword"
      }
    }
  }
}

返回类似:

{
  "aggregations": {
    "rate_counts": {
      "buckets": [
        { "key": "5%", "doc_count": 10 },
        { "key": "6%", "doc_count": 5 }
      ]
    }
  }
}

7. 更新文档

局部更新文档ID为1的内容:

POST /product_info/_update/1
{
  "doc": {
    "describe": "更新后的描述,支持5G和AI"
  }
}

8. 删除文档

删除ID为1的文档:

DELETE /product_info/_doc/1

进阶建议

  • 中文分词:安装 IK 分词器插件,提升中文搜索效果。
  • 多字段搜索:使用 multi_match 查询,实现多个字段同时搜索。
  • 复杂查询:结合 bool 查询实现多条件过滤(如范围、精确匹配等)。
  • 数据可视化:使用 Kibana 连接 Elasticsearch,创建仪表盘,实时监控数据。
  • 日志采集:结合 Logstash 和 Beats 实现日志的实时采集和处理。

真实案例代码示例:电商商品搜索

GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "华为手机",
      "fields": ["name", "description"]
    }
  },
  "highlight": {
    "fields": {
      "name": {},
      "description": {}
    }
  },
  "sort": [
    { "price": { "order": "asc" } }
  ],
  "from": 0,
  "size": 10
}
  • 说明:搜索“华为手机”,在商品名称和描述字段中匹配,返回前10条结果,按价格升序排序,并高亮显示匹配词。

总结

Elasticsearch 是一个强大的实时搜索和分析工具,核心是将数据以 JSON 文档形式存储在索引中,支持分布式架构保证高性能和高可用。通过简单的 REST API,用户可以创建索引、插入数据、执行搜索和聚合分析。结合 Kibana 等工具,可以实现数据的可视化和实时监控,广泛应用于电商搜索、日志分析、安全审计等领域。

掌握基础概念和操作后,可以根据业务需求设计索引结构,灵活使用查询和聚合功能,提升数据处理效率和用户体验。


以上内容基于多方权威资料整理,配合实用示例,帮助你快速理解和使用 Elasticsearch