核心功能
Elasticsearch 是基于 Lucene 的分布式搜索与分析引擎,数据以 JSON 文档写入索引,用 REST 接口的 Query DSL 或 ES|QL 查询,可做全文检索、聚合统计与向量检索,集群按分片与副本扩展。2024 年 8 月起源码在 AGPLv3、ELv2、SSPL 下提供。
功能亮点
查询语法
用 JSON 描述 match、bool、filter 等条件并组合
分片横向扩展
索引按分片切分并配副本,增加节点即可扩容并提升集群可用性
检索兼聚合
一次 _search 可同时返回命中文档与 terms 等聚合结果
三重开源许可
源码同时以 AGPLv3、ELv2、SSPL 提供,自建可用 Basic 级
适用场景
• 站内搜索与商品检索的分面筛选
• 日志与指标的集中检索和聚合分析
• 安全事件、审计数据的调查式检索
• 用 dense_vector 做语义与混合搜索
安装配置
bash
本地快速体验(官方脚本,用 Docker 拉起 Elasticsearch + Kibana): curl -fsSL https://elastic.co/start-local | sh Docker 单节点: docker network create elastic docker pull docker.elastic.co/elasticsearch/elasticsearch:9.4.4 docker run --name es01 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:9.4.4 Debian / Ubuntu(APT 仓库): wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-9.x.list sudo apt-get update && sudo apt-get install elasticsearch sudo systemctl start elasticsearch.service
使用方法
bash
创建索引:
PUT /books
批量写入文档(NDJSON):
POST /_bulk
{ "index" : { "_index" : "books" } }
{"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}
{ "index" : { "_index" : "books" } }
{"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328}
全文检索:
GET books/_search
{
"query": {
"match": {
"name": "brave"
}
}
}
Docker 部署后验证连通(需先取出容器内的 CA 证书):
docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200关键指标
尚未核验对标产品,此处只列本工具自身指标,不做对比结论。
指标Elasticsearch
价格免费
开源否
上手难度专家
相关工具
优点
- 全文检索、聚合统计与向量检索在同一集群完成,不必另配一套分析系统
- 索引按分片和副本切分,增加节点即可横向扩容并保持高可用
- REST + Query DSL 通用性强,官方客户端覆盖 Java、Python、JS、Go 等语言
- 自建可用免费的 Basic 级别,官方同时提供 Docker 镜像与 APT / YUM 仓库
缺点
- 源码许可为 AGPLv3、ELv2 或 SSPL,均非 Apache 2.0,二次分发前要先核对条款
- JVM 服务且吃内存,官方 Docker 示例建议至少 1GB,用机器学习能力要 6GB 以上
- 首次启动默认开启 TLS 与鉴权,本地调试还要复制 http_ca.crt 并带 elastic 密码访问
- Query DSL 嵌套层级深,bool、nested 与聚合组合起来的查询体积明显偏大
- 生产集群需要规划分片数、堆内存与滚动升级,运维负担高于轻量搜索引擎