ElasticSearch 学习:倒排索引与核心概念解析

5星 · 超过95%的资源 2 下载量 142 浏览量 更新于2024-08-30 收藏 256KB PDF 举报
Elasticsearch 学习笔记 Elasticsearch 是一个开源的分布式全文搜索引擎,广泛应用于日志分析、实时监控、数据搜索等领域。它以其高效、可扩展和易用性著称,尤其在处理海量数据的实时搜索和分析方面表现出色。 ### 基本概念 - **索引(Index)**:在 Elasticsearch 中,索引是一个逻辑空间,可以看作数据库,其中可以包含一个或多个类型(尽管在 ES 7.0 以后已废弃类型概念,建议一个索引只包含一种类型的数据)。 - **Type(类型)**:过去用于区分索引中的不同数据类型,但已被弃用,现在直接将文档(Document)存入索引。 - **Document(文档)**:文档是 Elasticsearch 中的基本数据单元,类似于关系型数据库中的记录,由多个字段(Field)组成。 - **Field(字段)**:文档中的属性,用于存储具体的数据。 - **Mapping(映射)**:定义了索引中的字段类型和相关配置,用于指导 Elasticsearch 如何解析和存储数据。 ### 倒排索引 倒排索引是 Elasticsearch 高效搜索的基础。每个字段在分词后都会生成一个倒排表,记录每个词对应哪些文档的 ID。在搜索时,通过词典找到目标词的倒排列表,然后快速定位到相关文档。 ### 超时(Timeout) 在 Elasticsearch 操作中,可以设置超时时间来限制操作的执行时间。如果操作在指定时间内未完成,将会被取消,这有助于防止因长时间运行导致的服务阻塞。 ### Query 与 Filter - **Query**:主要处理全文搜索,基于评分(Relevance Score)进行结果排序,适用于复杂的搜索需求。 - **Filter**:主要用于过滤,不计算评分,速度快,适合用于构建布尔查询的条件。 ### 其他关键概念 - **全文检索**:Elasticsearch 支持对文本内容进行自然语言的搜索。 - **短语检索**:允许用户搜索特定的词组,提高搜索准确性。 - **高亮检索**:在搜索结果中突出显示匹配的关键词。 - **分组检索**:用于对结果进行分类聚合。 - **平均值检索**:计算某个字段的平均值。 - **区间检索**:指定数值范围进行筛选。 - **批量查询**:一次性处理多个请求,提高效率。 - **查询排序**:根据评分或其他字段对结果进行排序。 - **查询缓存**:缓存查询结果以加速重复查询。 - **文档替换与删除**:更新或移除索引中的文档。 - **路由查询**:通过路由值指定数据应存储在哪个节点上。 - **分词(Tokenization)**:将文本拆分成可搜索的词汇单位。 - **Shard(分片)**:数据的物理分割,一个索引可以被分割成多个分片,分布于不同节点,实现水平扩展。 - **Replica Shard(副本分片)**:提供冗余,提高可用性和容错性。 - **Master Node(主节点)**:负责集群的元数据管理,如创建、删除索引,分配分片等。 - **Master 选举**:在主节点故障时,集群会选举新的主节点。 - **对等的分布式架构**:所有节点地位平等,可互换角色。 - **并发冲突**:分布式环境下可能出现的并发问题,通过乐观锁控制解决。 - **Docment 写入流程**:包括索引创建、数据序列化、路由分配、分片复制等步骤。 Elasticsearch 的存储结构是倒排索引和位图相结合,使其在处理大规模数据时保持高效。为了应对数据增长,可以通过垂直扩容(增加单节点硬件资源)或水平扩容(添加更多节点)来扩展集群。在扩展过程中,需要关注分片的重新分配(Rebalance)和主节点的选举,确保数据的一致性和服务的稳定性。