ES搜索引擎
ES搜索引擎简介
Elasticsearch(简称ES)是一个开源的分布式搜索和分析引擎,基于Apache Lucene构建。它能够实现快速、近实时的全文搜索,支持结构化查询、复杂聚合分析和高可扩展性。
核心特性
分布式架构Elasticsearch采用分布式设计,数据自动分片存储,支持水平扩展。节点加入或退出集群时,系统自动重新平衡数据。
近实时搜索文档索引后通常在1秒内可被搜索到,适用于需要快速响应的场景。
RESTful API提供基于HTTP的RESTful接口,支持JSON格式的请求和响应,与各种编程语言兼容。
多租户支持通过索引机制实现数据隔离,不同业务或用户可使用独立索引而互不干扰。
典型应用场景
全文检索支持复杂的文本搜索功能,包括模糊匹配、同义词处理、短语查询等。
日志分析常与Logstash、Kibana组成ELK技术栈,用于日志收集、存储和可视化分析。
商业智能通过聚合功能分析海量数据,生成统计报表和趋势图表。
基本概念
索引(Index)类似数据库中的表,是文档的逻辑集合。每个索引有独立的映射和配置。
文档(Document)索引中的基本数据单元,采用JSON格式存储。每个文档有唯一ID和一组字段。
分片(Shard)索引被分成多个分片,分布在集群节点上。分片分为主分片和副本分片,保证高可用性。
查询语法示例
简单匹配查询
{ "query": { "match": { "title": "搜索引擎" } } }布尔组合查询
{ "query": { "bool": { "must": [ { "match": { "content": "技术" }}, { "range": { "date": { "gte": "2023-01-01" }}} ] } } }性能优化建议
合理设置分片数分片数量应综合考虑数据量、查询负载和硬件资源。过多分片会增加开销,过少会影响并行能力。
使用过滤器缓存对不参与评分的查询使用filter上下文,利用缓存机制加速重复查询。
避免深度分页from+size方式处理深度分页效率低,推荐使用search_after或滚动查询。
监控与维护
健康状态检查通过_cluster/healthAPI监控集群状态,关注红/黄/绿三种健康等级。
索引管理定期关闭不再更新的索引,合并小段(segment)提升查询性能。
容量规划监控磁盘使用率,设置合理的分片大小(建议30-50GB),避免节点过载。
