ES 索引

ES 索引

  • Elasticsearch(以下称之为 ES)是一款基于 Lucene 的分布式全文搜索引擎,擅长海量数据存储、数据分析以及全文检索查询。
  • Lucene 是 Apache 下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,它是 ES 实现全文检索的核心基础,索引文档以及搜索索引的的核心流程都是在 Lucene 中完成的。

基础结构

MySQLES
database数据库index索引库
table表type类型
row行,记录document文档
column列filed字段

索引

  • 索引类似于Mysql数据库中的库概念,在ES之前的版本是有type这个概念的,后来的版本去掉了type,所以索引又有表的概念。简单的说,索引就是文档的容器,是一类文档的集合,逻辑空间上的分类,物理空间上的分片

倒排索引

  • ES中使用的是倒排索引,Mysql中的是正排索引,通过key去查value,而倒排索引是通过value去查key
  • Mysql中的一张表
IDNameAgeSex
1hjx24
2Bob24
3Alan26
  • 如果在ES中存储上表中的数据,ES会创建以下的索引
TermPosting List
hjx1
Bob2
Alan3
24[1,2]
263
1
[2,3]

Term是字段值,Posting List是其所属的id数组

Term Dictionary
  • 你会发现,本来Mysql中我存储三行数据就可以了,而在ES中却存储了七行数据,哪里高效了?ES为了查询Term快速,将所有Term排序,然后二分法查找Term,LogN的查找效率,类似查字典表,这个就是Term Dictionary。
Term Index
  • 当数据量多的时候,Term Dictionary的量也很大,放在缓存中不现实,而Term Index就像是字典中的索引页一样,比如我找A开头的有哪些,分别在哪页等等,在Term Dictionary的基础上又加了一层索引,可以看成一棵树。
  • 当然,Term Index不会保存所有的Term Dictionary,只是保存了Term的一些前缀与Term Dictionary之间的映射关系,再结合FST压缩技术,Term Index可以保存在内存中,这样从Term Index查询到Term Dictionary的block位置之后,再去磁盘中查找Term,就大大减少了访问磁盘的次数。

在这里插入图片描述

FST
  • FST(Finite State Transducer):有限状态传感器
  • 在这里使用moth、month、munt、mount、top、pop演示结果

在这里插入图片描述

  • FST有两个优点:1)空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;2)查询速度快。O(len(str))的查询时间复杂度。
  • FST以字节的方式存储所有的term,这种压缩方式可以有效的缩减存储空间,使得term index足以放进内存,但这种方式也会导致查找时需要更多的CPU资源。
  • Term Index放在内存中,Term Dictionary在磁盘中,所以使用ES查询时,先查询Term Index然后去磁盘中查找Term Dictionary所在的block块,获取其Posting List
  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 索引Elasticsearch 集群的核心组件之一,它负责存储、管理和查询大量数据。在 Elasticsearch 中,索引类似于数据库表的概念,在这里数据按照特定结构组织,并允许快速搜索。 ### Elasticsearch 索引的特点: 1. **结构化存储**:每个文档在索引中都有其唯一标识符 (ID),并且可以包含多种类型的数据,如文本、数字、日期等。文档通常由键值对组成,易于理解与操作。 2. **全文搜索能力**:Elasticsearch 强大之处在于它的全文搜索功能。它能够提供高效的模糊匹配、通配符查询、正则表达式搜索等功能,使得复杂的查询变得简单可行。 3. **分布式设计**:Elasticsearch索引可以分布到集群的多个节点上,实现了水平扩展性和高可用性。这意味着随着数据量的增长,系统性能也能线性提升。 4. **实时操作**:无论是写入还是检索数据,Elasticsearch 提供了非常低的延迟时间。这使其非常适合需要实时响应的应用场景。 5. **内置分析库**:Elasticsearch 内置了一系列强大的分析工具,包括但不限于分词、聚合、过滤等,用于从原始数据中提取有价值的信息。 ### 创建索引: 创建 Elasticsearch 索引的基本步骤包括选择索引名称并指定其配置属性,例如类型、映射规则等。通过 API 或 CLI 工具(如 `curl`),你可以轻松地创建一个新的索引,定义如何存储和搜索数据。 ```bash PUT /my_index_name { "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text", "analyzer": "ik_max_word" } } } } ``` 上述命令将创建名为 `my_index_name` 的索引,并定义了一个用于存储文本内容的字段 `title` 和 `content`,其中 `content` 字段使用了自定义的中文分词器。 ### 使用索引: 一旦索引建立,就可以向其中添加(`index`)、更新(`update`)、查询(`search`)、删除(`delete`) 文档。Elasticsearch 提供丰富的 RESTful API 来执行这些操作。 ### 相关问题: 1. **如何优化 Elasticsearch 索引性能?** - 调整分片设置、提高缓存命中率、合理设置字段类型及分析器、实施适当的索引策略等。 2. **如何处理 Elasticsearch 索引的数据迁移?** - 利用 Elasticsearch 的内部工具和脚本进行迁移,或者使用专门的数据复制服务。 3. **Elasticsearch 索引的安全管理措施有哪些?** - 设置安全角色、权限控制、认证机制、数据加密等方式来保护索引数据的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值