ES(elasticsearch) 搜索概述
在我们的面试过程中,面试官总喜欢问这类问题,虽然有时候我们接触的比较少,甚至没有接触过这个东西,但是如果能掌握一些基础,还是比较好的,能让自己加分(虽然有些面试官自己也不知道)。
ES 英文:(elasticsearch)
它是一种分布式全文搜索引擎,基于Lucene(全文搜索框架)开发而来。
优势:
- 高容量:支持PB级数据的储存和查询
- 高吞吐:支持海量数据近实时的数据处理
- 高可用:基于副本机制支持部分服务宕机后任然可正常运行和使用
- 支持多维度数据分析和处理:除了支持全文索引,还支持基于单个字段精确查找和多个字段联合查询等复杂的数据查询操作
- 可扩展(理论上无上限) - 集群
- API简单易用,高度集成的服务(RESTful风格的API,各语言客户端)
- 支持插件机制
场景:
- 全文索引:Elasticsearch可以用于实现全文搜索功能,例如搜索引擎、文档管理系统、电子商务搜索等。它支持复杂的查询语句、中文分词、近似搜索等功能,可以快速地搜索并返回匹配的结果。
- 分布式搜索:Elasticsearch是一个分布式搜索引擎,可以轻松地扩展集群规模,以支持更大的数据量和更高的查询负载。它支持水平扩展和分片技术,可以实现快速的数据处理和查询。
- 日志分析:Elasticsearch可以用于实现实时日志分析,例如监控系统、异常日志分析等。它可以快速地索引和搜索大量的日志数据,并支持聚合、可视化等功能,可以帮助用户快速定位和解决问题。
- 搜索推荐:Elasticsearch可以用于实现搜索推荐功能,例如电商搜索推荐、新闻推荐等。它可以根据用户的搜索历史、行为等数据,进行个性化推荐,并支持实时更新和调整推荐结果。
- 可扩展生态
旧的数据查询查询流程
关系数据库(比如Mysql) -> 数据库DB -> 表TABLE -> 行ROW -> 列Column
Elasticsearch -> 索引库Indices -> 类型Types -> 文档Documents -> 字段Fields
ES集群可以包含多个索引(数据库),每个索引库中可以包含多个类型的表,每个类型包含多个文档,然后每个文档包含多个字段
DSL查询与过滤
由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL)
全文索引流程分为2个部分:索引创建和索引查询
索引创建步骤:
- 获取内容
- 构建文档
- 文档分词
- 创建索引
索引查询步骤:
- 调用查询接口-用户搜索界面
- 创建查询
- 执行查询
- 返回结果
ElasticSearch 工作原理
ElasticSearch(简称ES)是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎
索引Index - 类似库
类型Type - 类似表
文档Document
映射Mapping
集群Cluster
是一个或多个节点的集合
节点Node
分片Share 和 副本Replica
ElasticSearch提供了易用但功能强大的RESTful API以用于与集群进行交互,这些API大体可分为如下四类:
- 检查集群、节点、索引等健康与否,以及获取其相关状态与统计信息
- 管理集群、节点、索引数据及元数据
- 执行CRUD(增删查改)操作;
- 执行高级搜索操作,例如paging、filtering、scripting、faceting、aggregations及其它操作
执行查询分为2个阶段
分散阶段 和 合并阶段
分散阶段是向所查询的索引中的所有shard发起执行查询的过程
合并阶段是将各share返回的结果合并、排序并响应给客户端的过程
向es发起查询的2个方式:
1、通过RESTful request api 传递查询参数 quert-string
2、通过发送 RESTful request body,也称作JSON 格式
一个分析器通过需要三个组件构成
字符过滤器,分词器,分词过滤器