Elasticsearch 入门实战:从安装到全文检索与聚合
Elasticsearch 是一款基于 Lucene 的分布式搜索与分析引擎,常用于站内搜索、日志分析和数据聚合。它把文档存成 JSON,用倒排索引实现毫秒级全文检索。本文用一个最小例子,带你从安装走到全文检索与聚合。
一、Elasticsearch 是什么
传统数据库擅长精确查询,但对“包含某个词”“相关度排序”这类需求并不友好。Elasticsearch 的核心是倒排索引:它把每个词映射到包含该词的文档列表,查询时先定位词,再按相关度打分排序。同时它原生支持分布式、分片与副本,单机能跑,集群能扩。
几个核心概念要先分清。索引相当于一张表,是文档的集合;文档是 JSON 对象,是最小存储单位;映射定义了字段类型,例如文本字段会被分词,关键字字段只做精确匹配。分词器的选择直接决定了中文搜索的效果,入门阶段先用默认配置即可。
二、安装与启动
最省事的办法是用容器启动单节点。拉取与版本一致的镜像后,用单节点模式运行,把 9200 端口映射出来。启动成功后访问本地 9200 端口,返回集群名称、版本与状态即表示服务就绪。生产环境不要用单节点模式,还要给堆内存、磁盘水位和安全认证留出配置。
第一次启动失败多半是内存或权限问题。先看容器日志里的报错行,再检查虚拟内存映射数与挂载目录权限。开发机上建议把堆内存设小一点,例如 512M,避免一启动就占满内存。
三、创建索引与写入文档
写入数据前,先创建一个名为 books 的索引,并给字段定好类型:标题用文本类型,作者与分类用关键字类型,价格用数值类型。类型定错了,后面的聚合与排序都会受影响,索引一旦写入大量数据,改类型只能重建。
随后写入三条图书文档。每次写入指定文档编号,便于后面按编号取回。批量写入时用批量接口一次提交多条,比逐条写入快得多,导入数据时优先使用它。
四、全文检索入门
最常用的查询是 match 查询。搜索标题中包含“分布式”的图书,引擎会先分词,再按相关度返回结果。想同时搜标题和简介,可以用多字段查询,命中任一字段的文档都会返回。
多个条件组合时用布尔查询:必须满足的条件放 must,必须排除的放 must_not,应当满足的放 should。组合查询是日常搜索的骨架,先写出“必须、排除、加分”三类条件,再翻译成查询语句,思路会清晰很多。
五、聚合分析入门
聚合是 Elasticsearch 的另一张王牌。按分类做词条聚合,可以统计每个分类下有多少本书;再嵌套一个平均值聚合,就能算出每个分类的均价。聚合结果与查询条件可以叠加,先过滤再聚合,例如只统计价格低于一百元的图书的分类分布。
入门时记住两个原则:需要精确分组的字段用关键字类型;聚合层级不要一开始就嵌套太深,先跑通一层,再按需加深。
六、常见坑与建议
第一,文本字段默认会被分词,直接拿它做聚合会得到按词切分的结果,分组字段一定要用关键字类型。第二,查询结果默认只返回前十条,做分页要显式指定条数。第三,模糊查询与通配查询很耗资源,尽量用全文查询代替。
学习建议是先跑通“建索引、写文档、查文档、做聚合”这个最小闭环,再去研究分词器、相关度调优与集群部署。把上面的例子亲手敲一遍,Elasticsearch 的核心用法就入门了。
- 点赞
- 收藏
- 关注作者
评论(0)