为了让项目的性能更好,检索的效率更高,考虑引入elasticsearch中间件。
我们的服务器环境为centos7,综合版本考虑,springboot的插件与服务器中都装7.x版本的
比较新,也比较多特性支持。
ElasticSearch简介
ElasticSearch是一个开源的分布式搜索引擎,它使用Lucene作为底层引擎,提供了分布式多租户全文搜索、实时数据分析和可视化等功能。其主要优势包括:
- 高性能:ElasticSearch采用分布式架构,可以快速处理大量数据,支持实时搜索和分析。
- 可扩展性:ElasticSearch支持水平扩展,可以通过添加新的节点来扩展集群,实现高可用和负载均衡。
- 灵活性:ElasticSearch提供了丰富的API接口,可以方便地进行数据索引、搜索和分析等操作,同时也支持自定义插件和扩展。
- 易用性:ElasticSearch提供了友好的Web界面和命令行工具,可以方便地进行管理和监控。
其底层实现原理主要包括:
- 分片存储:ElasticSearch将数据分成多个片段进行存储和索引,每个片段可以独立管理和查询,提高了搜索效率和可扩展性。
- 倒排索引:ElasticSearch使用Lucene的倒排索引技术,将文档中的每个词都建立一个索引表,可以快速定位包含该词的文档。
- 分布式搜索:ElasticSearch采用分布式搜索技术,将查询请求发送到所有节点进行处理,然后将结果合并返回给客户端。
ElasticSearch可以用在很多地方,包括:
- 搜索引擎:ElasticSearch可以作为企业内部搜索引擎或者网站搜索引擎,提供高效的全文搜索功能。
- 数据分析:ElasticSearch可以用于实时数据分析和可视化,支持聚合、过滤和排序等操作。
- 日志管理:ElasticSearch可以用于日志管理和监控,支持实时索引和搜索。
- 地理空间搜索:ElasticSearch支持地理空间搜索,可以用于位置数据的搜索和分析。
Elasticsearch底层有什么重要的模块?每个模块的职责或者其底层的实现是怎么样的?你能用中文或者英文进行较为完善的解答吗?
这个问题是笔者在蚂蚁一面时被问道的问题,这里进行一个复盘。
Elasticsearch底层架构主要包括以下几个模块³:
- 索引模块:负责索引的创建、删除、更新等操作。
- 搜索模块:负责搜索请求的处理,包括查询解析、查询优化、分布式查询等。
- 存储模块:负责数据的存储和检索,包括文档的增删改查、数据的压缩和解压缩等。
- 分析模块:负责对文本进行分词、过滤、归一化等操作,以便于后续的搜索和聚合。
- 映射模块:负责定义文档的结构和属性,包括字段类型、分词器、过滤器等。
每个模块的职责如下:
- 索引模块:负责管理索引,包括创建、删除、更新索引等操作。索引是Elasticsearch中最基本的数据单元,它由多个分片组成,每个分片可以在不同的节点上存储。索引模块还负责管理分片的分配和迁移。
- 搜索模块:负责处理搜索请求,包括查询解析、查询优化、分布式查询等。查询解析将用户输入的查询语句转换为内部查询结构,查询优化会对查询进行优化以提高搜索效率,分布式查询会将查询请求发送到所有节点进行处理,并将结果合并返回给客户端。
- 存储模块:负责数据的存储和检索,包括文档的增删改查、数据的压缩和解压缩等。Elasticsearch使用倒排索引来实现数据的快速检索,每个分片都有自己的倒排索引。存储模块还负责管理文档的版本控制和冲突检测。
- 分析模块:负责对文本进行分词、过滤、归一化等操作,以便于后续的搜索和聚合。Elasticsearch提供了多种内置的分词器和过滤器,同时也支持自定义分词器和过滤器。
- 映射模块:负责定义文档的结构和属性,包括字段类型、分词器、过滤器等。映射是一个JSON对象,它描述了文档中每个字段的类型和属性。映射还可以定义字段别名、动态映射等。
(1) Elasticsearch 底层数据结构 - TechLee - 博客园. https://www.cnblogs.com/tech-lee/p/15225276.html 访问时间 2023/4/11.
(2) 分布式搜索引擎Elasticsearch的架构分析 - 知乎. https://zhuanlan.zhihu.com/p/334348919 访问时间 2023/4/11.
(3) 一篇搞懂ElasticSearch(附学习脑图) - 掘金. https://juejin.cn/post/700959379