Elasticsearch 的索引数据默认存储在磁盘上,每个索引对应一个或多个分片(Shard),每个分片都是一个独立的 Lucene 索引,由多个文件构成。这些文件包括:
-
.fdt 文件:存储文档字段的原始数据,以二进制格式编码。
-
.fdx 文件:存储文档字段的偏移量和长度信息,以提高搜索效率。
-
.fnm 文件:存储字段名称信息,以便识别不同类型的字段和查询语法。
-
.frq 文件:存储词项出现的文档编号及其频率信息,以便计算相关性得分。
-
.nrm 文件:存储归一化因子和长度向量信息,以便更准确地评估相似度得分。
-
.tis 和 .tim 文件:存储词条和项向量信息,以便实现前缀查询和匹配算法。
总之,Elasticsearch 使用基于 Lucene 的倒排索引技术来支持丰富的文本搜索和分析功能,并通过分布式架构和多副本机制实现高可用性和容错性。同时,它还采用了现代化的存储和检索算法,如压缩和位向量技术等,以提高性能和效率。
一般情况下,Elasticsearch 的查询不需要经过MySQL。Elasticsearch 是一个独立的分布式搜索和分析引擎,它可以轻松地与多种存储系统集成,包括关系型数据库(如MySQL),NoSQL 数据库(如MongoDB 和 Cassandra)以及文件系统、日志收集器等。
如果需要在 Elasticsearch 中执行与 MySQL 相似的关系型查询(如 JOIN 操作等),通常会使用 Elastic Stack 的组件之一,如 Logstash 或 Beats,将 MySQL 数据库中的数据导入 Elasticsearch,并基于 Elasticsearch 的搜索和聚合功能进行数据分析和可视化。这样可以大大简化复杂的 SQL 查询,提高查询效率和性能。
总之,Elasticsearch 适用于全文搜索和分析场景,而 MySQL 更适用于存储、管理和更新结构化数据。因此,在实际应用中,Elasticsearch 和 MySQL 可以相互补充,根据不同的需求和业务场景选择合适的存储和查询方案。