Skip to main content
[ PIER ]

Elasticsearch

分布式全文搜索和分析引擎。

Service #search#analytics#logging#elk#full-text

Elasticsearch 是构建于 Apache Lucene 之上的分布式 RESTful 搜索和分析引擎。它为各种规模的公司驱动搜索栏、日志聚合(ELK 栈)、产品目录、安全分析和可观测性工具。Pier 部署适用于开发、测试和小到中型生产工作负载的单节点配置。

使用 Pier 部署

  1. 1 打开 Pier 控制台,点击 Add service。
  2. 2 从模板列表中选择 Elasticsearch。
  3. 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
  4. 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。

什么是 Elasticsearch?

Elasticsearch 是世界上部署最广泛的全文搜索和分析引擎。它在 2010 年作为 Apache Lucene 的分布式包装器起步,已发展为现代日志/可观测性栈(ELK + EFK 中的”E”)、安全分析(SIEM)和跨各行业搜索驱动应用的基础。

它的秘诀:将 JSON 文档存储在分片中,为关键字搜索构建倒排索引,为语义搜索 构建密集向量索引,并通过 JSON REST API 公开所有内容。聚合将其变为实时分析 引擎。自动完成、模糊匹配、多语言分析器和同义词使其成为许多电商网站和 SaaS 产品的搜索栏引擎。

Pier 如何部署它

Pier 使用官方 docker.elastic.co/elasticsearch/elasticsearch 镜像(当前 latest 根据发布日期为 8.x 或 9.x)。默认端口是内部 9200/tcp。数据卷 挂载到 /usr/share/elasticsearch/data

自动生成强 elastic 用户密码。在 Elasticsearch 8+ 中默认启用安全 (HTTPS + 基本认证);你可以通过 xpack.security.enabled=false env 覆盖为内部开发使用禁用。

对于可视化,部署 elasticsearch-kibana 模板,捆绑 Elasticsearch + Kibana 与正确的 env 连接。对于带 3+ 节点的生产集群,你需要手动编排 — Pier 的 单容器模板针对开发和小型生产。

何时不要使用 Elasticsearch

对于规模化的日志重度可观测性 — ClickHouse 存储日志便宜 10×。对于纯产品 目录搜索 — Meilisearch 或 Typesense 更轻易于操作。对于小型部署 — 带 tsvector 和 GIN 索引的 Postgres 全文搜索通常足够。Elasticsearch 在你需要 搜索 + 分析 + 聚合 + 向量搜索在一个引擎时大放异彩。

核心功能

强化版全文搜索

倒排索引、BM25 排名、模糊匹配、自动完成(边缘 n-gram)、同义词、多语言分析器。用 JSON DSL 或 Lucene 语法查询。

设计上分布式

数据模型内置分片(水平分区)和副本(冗余)。跨节点线性扩展;100+ 节点的集群是常规。

聚合与分析

GROUP BY、百分位、直方图、地理空间聚合、管道聚合 — Elasticsearch 在 JSON 文档上加倍作为实时分析引擎。

ES|QL 查询语言

ES|QL(8.11+)添加了类 SQL 的管道语法用于临时探索。对新手比 Query DSL 门槛低。

向量搜索

自 8.0 起原生密集向量字段和 HNSW 索引。RAG 和语义搜索工作负载 — 与经典 BM25 在单一混合查询中并存。

生态系统

Kibana 用于可视化、Logstash 用于摄取管道、Beats 用于轻量级 shipper、Java/JS/Python/Go/Ruby/PHP/.NET/Rust 的官方客户端。

应用场景

应用和日志搜索

ELK 中的"E"。Beats / Fluent Bit / Vector 从你的应用发送日志;Elasticsearch 索引;Kibana 可视化。数千组织的默认可观测性栈。

产品目录搜索

分面导航、错字容忍、同义词、加权 boost、推荐。电商网站的搜索栏。

安全分析(SIEM)

Elastic Security 将 Elasticsearch 用作 SIEM 骨干。检测规则、行为分析、威胁狩猎。

向量 + 词汇混合搜索

结合 BM25 关键字匹配和密集向量相似度。企业文档 RAG 的两全其美。

实时业务指标

对 JSON 形状事件数据的聚合提供亚秒分析 — 按地区销售、按设备会话等。

代码示例

索引一个文档 bash
curl -X POST "elasticsearch:9200/products/_doc" -H 'Content-Type: application/json' -d '{
  "name": "iPhone 17 Pro",
  "category": "phones",
  "price": 1299,
  "in_stock": true,
  "tags": ["apple", "5g", "flagship"]
}'
全文 + 过滤搜索 bash
curl -X POST "elasticsearch:9200/products/_search" -H 'Content-Type: application/json' -d '{
  "query": {
    "bool": {
      "must":   [{ "match": { "name": "iphone" } }],
      "filter": [{ "term":  { "in_stock": true } }, { "range": { "price": { "lte": 1500 } } }]
    }
  },
  "aggs": {
    "categories": { "terms": { "field": "category" } }
  }
}'
ES|QL 临时查询 sql
FROM logs-*
| WHERE @timestamp > NOW() - 24 HOURS
| STATS count = COUNT(*) BY service.name
| SORT count DESC
| LIMIT 20
密集向量搜索(kNN) bash
curl -X POST "elasticsearch:9200/products/_search" -d '{
  "knn": {
    "field": "embedding",
    "query_vector": [0.1, 0.2, ...],
    "k": 10,
    "num_candidates": 100
  }
}'

对比

vs OpenSearch OpenSearch 是 Elasticsearch 的 Apache 2.0 分支(7.10 后许可证变更),由 AWS + 社区维护。API 高度兼容。如果你想要严格 OSS 选 OpenSearch;想要最新功能选 Elasticsearch。
vs ClickHouse ClickHouse 存储结构化日志数据便宜 10×,聚合更快。Elastic 在全文搜索和临时 JSON 查询上胜出。许多可观测性栈将日志从 Elastic 迁移到 ClickHouse,但保留 Elastic 用于搜索。
vs Algolia / Typesense Algolia 是托管 SaaS — 快速、精致、昂贵。Typesense 是 OSS 且更轻。Elasticsearch 更重但覆盖纯全文之外的分析 + 日志搜索。
vs Meilisearch Meilisearch 是专注的现代全文引擎 — 比 Elastic 更简单,更易操作。产品目录搜索选 Meili;"一切搜索 + 分析"选 Elastic。

常见问题

许可证情况?
Elasticsearch 在 2021 年从 Apache 2.0 重新许可为双 SSPL/Elastic License。SSPL 限制提供 Elasticsearch 作为托管服务。对于你自己的应用或内部日志,没问题 — Pier 部署官方 Elastic 镜像。
内存要求?
Elasticsearch 基于 JVM,需要大量内存。容器中最少 2 GB RAM;生产 4 GB+。配置 `ES_JAVA_OPTS=-Xms2g -Xmx2g` 来控制堆。
单节点还是集群?
Pier 的 Elasticsearch 模板默认运行单节点(适合开发/测试/小型生产)。对于生产集群,通常需要 3+ 个 master-eligible 节点 — 超出此单容器模板范围。
安全 / 认证?
Elasticsearch 8 默认启用 HTTPS + 基本认证。Pier 生成 elastic 用户密码并在服务页面显示。仅在开发中通过 `xpack.security.enabled=false` 禁用 TLS。
如何连接 Kibana?
使用 `elasticsearch-kibana` 模板 — 捆绑 ES + Kibana 与正确的 env 连接。
Indices vs Data Streams?
对于时序数据(日志、指标),使用 Data Streams + ILM(索引生命周期管理)进行自动滚动。对于文档集合(产品、文章),使用普通索引。
备份策略?
使用快照仓库 — 将 S3 配置为仓库并运行计划快照。恢复是单个 API 调用。

相关服务

在你的 VPS 上部署

Elasticsearch 是构建于 Apache Lucene 之上的分布式 RESTful 搜索和分析引擎。它为各种规模的公司驱动搜索栏、日志聚合(ELK 栈)、产品目录、安全分析和可观测性工具。Pier 部署适用于开发、测试和小到中型生产工作负载的单节点配置。

部署此服务 →