新闻详情

新闻详情

首页 / 资讯中心 / 详情

Docker 部署 Elasticsearch + Kibana:电商数据检索入门实战

发布时间:2026/10/1 10:25:44来源:尧图网络
Docker 部署 Elasticsearch + Kibana:电商数据检索入门实战
1. 引言Elasticsearch 是基于 Lucene 的分布式搜索与分析引擎具备强大的全文检索、聚合统计和日志分析能力Kibana 则是 Elasticsearch 官方的数据可视化与探索平台常用于数据查询、仪表盘展示和集群监控。本文以 Elasticsearch 8.15.0 和 Kibana 8.15.0 为例全程使用 Docker 完成部署并补齐单节点启动、网络配置、安全认证关闭、JVM 内存设置等容易遗漏的命令与参数帮助你快速搭好一套本地可用的 Elastic Stack 环境。随后本文还会结合电商商品数据演示索引创建、文档写入、全文搜索、组合查询、排序分页和聚合统计等常见操作最后使用 Kibana 的 Discover 功能直接浏览和验证写入的数据。2. 整体架构与部署顺序本次部署包含两个容器并让它们处于同一个 Docker 网络中Elasticsearch数据存储与检索服务容器名elasticsearch对外暴露9200端口。Kibana可视化界面容器名kibana对外暴露5601端口通过容器名elasticsearch访问 Elasticsearch。部署顺序很重要创建 Docker 网络 es-net启动 Elasticsearch等待 ES 就绪启动 Kibana浏览器访问 5601 验证由于 Kibana 需要通过容器名elasticsearch解析到 Elasticsearch两个容器必须处于同一个es-net网络中。3. 第一步创建 Docker 网络两个docker run命令都使用了--net es-net因此需要先创建该网络否则容器将因找不到es-net而启动失败。dockernetwork create es-net创建完成后可以用下面的命令确认网络存在dockernetworkls|grepes-net4. 第二步启动 Elasticsearch使用官方镜像docker.elastic.co/elasticsearch/elasticsearch:8.15.0启动单节点 Elasticsearchdockerrun-d--nameelasticsearch--netes-net-p9200:9200\-ediscovery.typesingle-node\-expack.security.enabledfalse\-expack.security.enrollment.enabledfalse\-eES_JAVA_OPTS-Xms1g -Xmx1g\docker.elastic.co/elasticsearch/elasticsearch:8.15.0参数说明-d后台运行容器。--name elasticsearch将容器命名为elasticsearchKibana 后续会通过该名称访问它。--net es-net加入前面创建的自定义网络。-p 9200:9200将容器内 9200 端口映射到宿主机。discovery.typesingle-node以单节点模式启动跳过集群发现。xpack.security.enabledfalse关闭安全认证便于本地测试无需密码即可访问。xpack.security.enrollment.enabledfalse关闭节点注册令牌功能配合安全认证关闭使用。ES_JAVA_OPTS-Xms1g -Xmx1g设置 JVM 堆内存最小与最大为 1GB。这里特意补充一条容易遗漏的配置。Elasticsearch 8.x 默认启用了 HTTP SSL部分环境下关闭安全认证后直接通过http://localhost:9200访问可能得不到响应。此时建议在启动命令中追加-e xpack.security.http.ssl.enabledfalse明确关闭 HTTP 加密dockerrun-d--nameelasticsearch--netes-net-p9200:9200\-ediscovery.typesingle-node\-expack.security.enabledfalse\-expack.security.enrollment.enabledfalse\-expack.security.http.ssl.enabledfalse\-eES_JAVA_OPTS-Xms1g -Xmx1g\-m2g\docker.elastic.co/elasticsearch/elasticsearch:8.15.0同时建议补充-m 2g限制容器内存。堆内存设为 1GB 后JVM 还需要额外的堆外内存用于索引、缓存与进程开销给容器预留 2GB 左右会更稳定。5. 第三步启动 Kibana等 Elasticsearch 启动完成后再使用官方镜像docker.elastic.co/kibana/kibana:8.15.0启动 Kibanadockerrun-d--namekibana--netes-net-p5601:5601\-eELASTICSEARCH_HOSTShttp://elasticsearch:9200\docker.elastic.co/kibana/kibana:8.15.0参数说明--name kibana容器命名为kibana。-p 5601:5601将 Kibana 界面端口映射到宿主机。ELASTICSEARCH_HOSTShttp://elasticsearch:9200指定 Kibana 要连接的 Elasticsearch 地址。这里使用的是容器名elasticsearch因为两者处于同一网络es-net中Docker 会通过内置 DNS 自动解析。由于前面已经关闭了 Elasticsearch 的安全认证Kibana 无需配置用户名和密码即可连接。6. 第四步访问 Kibana启动完成后打开浏览器访问http://localhost:5601首次加载 Kibana 页面会比较慢等首页正常显示后即可进行后续操作。7. 电商示例商品数据写入与测试下面以电商商品数据为例演示如何创建索引、写入单条文档以及使用 Bulk API 批量写入多条商品数据。点击右下角的Dev Tools打开对应页面console里面自带了一个例子直接删除就行右侧的窗口是命令执行的返回结果现在没有执行任何命令所以是空的。将以下内容填入console# # 1. 清理环境删除已存在的 products 索引若不存在会报 404忽略# DELETE /products# # 2. 创建 products 索引并定义字段映射Mapping# text 类型用于全文搜索keyword 类型用于精确过滤和聚合# PUT /products{mappings:{properties:{name:{type:text},brand:{type:keyword},category:{type:keyword},price:{type:double},stock:{type:integer},tags:{type:keyword},desc:{type:text},created_at:{type:date}}}}# # 3. 插入单条商品数据文档 ID 1# POST /products/_doc/1{name:iPhone 15 Pro 256G 钛金属,brand:Apple,category:手机,price:8999,stock:120,tags:[5G,旗舰,iOS],desc:搭载A17 Pro芯片支持USB-C接口,created_at:2024-09-20}# # 4. 批量插入商品数据Bulk API# 注意数据行之间不能有注释最后必须留一个空行# POST /_bulk{index:{_index:products,_id:2}}{name:小米14 Ultra,brand:Xiaomi,category:手机,price:6499,stock:200,tags:[5G,徕卡,旗舰],desc:徕卡光学镜头骁龙8Gen3,created_at:2024-02-25}{index:{_index:products,_id:3}}{name:华为 Mate 60 Pro,brand:Huawei,category:手机,price:6999,stock:50,tags:[5G,卫星通话],desc:支持卫星通话麒麟芯片,created_at:2023-08-29}{index:{_index:products,_id:4}}{name:MacBook Air M3 13寸,brand:Apple,category:笔记本,price:8999,stock:80,tags:[轻薄,办公],desc:M3芯片续航18小时,created_at:2024-03-08}{index:{_index:products,_id:5}}{name:索尼 WH-1000XM5 耳机,brand:Sony,category:耳机,price:2499,stock:300,tags:[降噪,头戴式],desc:行业顶级降噪,created_at:2022-05-19}# # 5. 查询所有商品# GET /products/_search{query:{match_all:{}}}# # 6. 全文搜索在 name 字段中搜索“手机”# GET /products/_search{query:{match:{name:手机}}}# # 7. 精确过滤查找品牌为 Apple 的商品# GET /products/_search{query:{term:{brand:Apple}}}# # 8. 组合查询Apple 品牌的手机价格在 5000-9000 之间# must 参与打分filter 不参与打分但可缓存速度更快# GET /products/_search{query:{bool:{must:[{term:{brand:Apple}},{term:{category:手机}}],filter:[{range:{price:{gte:5000,lte:9000}}}]}}}# # 9. 排序 分页按价格升序返回前 3 条# GET /products/_search{query:{match_all:{}},sort:[{price:asc}],from:0,size:3}# # 10. 多字段搜索在 name 和 desc 中搜索“芯片”# GET /products/_search{query:{multi_match:{query:芯片,fields:[name,desc]}}}# # 11. 聚合统计统计各品牌的商品数量# GET /products/_search{size:0,aggs:{by_brand:{terms:{field:brand}}}}# # 12. 电商综合搜索示例# - 搜索“手机”商品名权重是描述的 3 倍# - 过滤Apple 品牌价格 3000-10000有库存# - 排序先按相关性得分降序再按上架时间降序# - 聚合返回品牌列表和价格区间统计用于筛选栏# GET /products/_search{query:{bool:{must:[{multi_match:{query:手机,fields:[name^3,desc]}}],filter:[{term:{brand:Apple}},{range:{price:{gte:3000,lte:10000}}},{range:{stock:{gt:0}}}]}},sort:[{_score:desc},{created_at:desc}],from:0,size:20,aggs:{brands:{terms:{field:brand}},price_range:{range:{field:price,ranges:[{to:3000},{from:3000,to:6000},{from:6000}]}}}}# # 13. 更新文档修改 ID1 的商品价格和库存# POST /products/_update/1{doc:{price:8499,stock:100}}# # 14. 删除文档删除 ID2 的商品# DELETE /products/_doc/2# # 15. 删除索引清理整个 products 索引如不想删可去掉# DELETE /products在 Console 中分别点击对应命令右侧会显示运行按钮点击运行按钮后右侧窗口会显示该命令的返回结果。此外也可以使用 Postman、Apifox 等 HTTP 工具执行上述请求。8. 使用 Discover 查看数据进入 Kibana 主界面点击左侧菜单中的 Stack Management。在 Kibana 分类下点击 Data Views再点击 Create data view。分别填写 Data view 名称products、索引模式products时间字段选择created_at点击保存。保存后点击主菜单中的 Analytics - Discover选择刚创建的productsData View并在右上角调整时间范围即可看到刚刚写入的商品数据。9. 总结本文通过两个docker run命令快速搭建了一套本地可用的 Elastic Stack 环境核心步骤如下创建自定义网络es-net让 Elasticsearch 与 Kibana 通过容器名互相访问。以单节点模式启动 Elasticsearch关闭安全认证并设置 JVM 堆内存便于本地开发调试。启动 Kibana 并连接到 Elasticsearch通过http://localhost:5601访问可视化界面。以电商商品数据为例完成了索引创建、文档写入、全文搜索、精确过滤、组合查询、排序分页和聚合统计等常见操作。使用 Kibana 的 Discover 功能快速浏览和探索写入的products数据。这套环境可以作为入门学习和本地开发的基础后续还可以继续体验 Kibana 的 Dashboard 仪表盘、可视化图表以及 Elasticsearch 更丰富的查询与分析能力。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

实时流处理架构实战:Flume+Kafka+Flink+Structured Streaming方案详解 2026/10/1 11:08:43

实时流处理架构实战:Flume+Kafka+Flink+Structured Streaming方案详解

1. 从业务痛点聊起:为什么实时流处理成了刚需过去几年,我参与过不少数据平台类的项目,发现一个共性现象:几乎所有团队在建设数据中台或BI体系时,都会先做离线数仓,稳定跑通后再考虑实时链路。可一旦业务方尝…

阅读更多 →
C语言结构体大小计算:内存对齐规则与工程实践详解 2026/10/1 11:08:37

C语言结构体大小计算:内存对齐规则与工程实践详解

结构体大小这个问题,几乎是每个学C语言的人都会撞上的墙。学完基本语法,写了个结构体,一sizeof算出来,怎么跟想象中“成员大小加起来”不一样?多出来的那几个字节去哪了?我之前带过的不少新人,项…

阅读更多 →
纯前端JS实现本地文件拆分与合并:File、Blob与Stream实战 2026/10/1 11:08:37

纯前端JS实现本地文件拆分与合并:File、Blob与Stream实战

我刚做完一个挺有意思的小项目:一个纯前端、基于JS实现的文件合并拆分在线工具。起因很简单——经常要把几十个TXT日志按日期拆开,或者反过来把一堆分片合成一个大压缩包。市面上那些在线工具大部分得先把文件上传到服务器,一个是慢&#xff…

阅读更多 →
多空动能背离指标详解:识别趋势力竭的技术分析工具 2026/10/1 11:08:30

多空动能背离指标详解:识别趋势力竭的技术分析工具

1. 这个指标到底在说什么做交易的人,大概都遇到过这种场景:价格明明还在往上冲,自己刚追进去,结果立刻被套在高点;或者是跌了很久觉得到底了,抄进去之后发现下面还有地下室。事后复盘一看,很多次…

阅读更多 →
如何用认知去开发认知商品,再去迭代认知本身实证案例:矩规评级定位定级定价三定合一硬科技体系 2026/10/1 11:08:23

如何用认知去开发认知商品,再去迭代认知本身实证案例:矩规评级定位定级定价三定合一硬科技体系

中国终于跑出一套「定位定级定价三定合一」的硬科技体系|技术领域的穆迪,正在合肥诞生今天我们拆解一套国内几乎没有人做、也极少有人看懂的底层范式—— 一套完全源自中国产业实战、全流程标准化、全链路可复现、可审计、可联邦分布式部署、可全球通用的…

阅读更多 →
Java驯服自动化立库:WMS/WCS设备调度实战与核心机制解析 2026/10/1 11:08:17

Java驯服自动化立库:WMS/WCS设备调度实战与核心机制解析

凌晨两点,值班电话把我吵醒。电话那头仓管员声音很急:3号库堆垛机停了,任务卡在待回令,二十多个出库单全堵在路上。我一边翻身下床,一边回想这个场景——做WMS的我太熟悉了,仓库里轰隆作响的堆垛机、机械臂…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉